varを使った変数宣言
明示的に型を記述せず、型を推論することを型推論と呼ぶ。Javaではvar(varible type)を使用することで型推論が可能である。以下のようにして宣言する。
var num = 10;
varの使い方
メソッドの引数、コンストラクタの引数、メソッドの戻り値、フィールド(メンバ変数)、catchブロックでは使用できない。
Java(Main.java)
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
var a = 100;//エラー①
static var b = 100;//エラー②
public static void main(String[] args) {
var c = "hello";//OK③
var d = 10;//OK④
var e;//エラー⑤
var f = null;//エラー⑥
final var g = 100;//OK⑦
var a1 = new int[] {1,2,3};//OK⑧
var a2 = new int[1];//OK⑨
var a3 = new int[];//エラー⑩
var a4 = {1,2,3};//エラー⑪
var b1 = new ArrayList<>();//OK⑫
var b2 = new ArrayList<String>();//OK⑫
var var = 1;//OK⑬
var b3 = () -> {};//エラー⑭
public var b4 = "aaa";//エラー⑮
}
public static int number(var a) {//エラー⑯
return a;
}
}
①、②メンバ変数(インスタンス変数やクラス変数)にvarは使えない
③、④ローカル変数なのでvarは使用可
⑤初期値未設定だとvarは使えない
⑥初期値nullだとvarは使えない
⑦finalと併用は可能。この時finalが先
⑧,⑨配列の宣言に使用可能
⑩配列の要素または初期値が未設定なのでvarは使えない
⑪配列の初期化式を使うと型推論ができないので、varは使えない
⑫ジェネリクスのダイヤモンド演算子<>では変数宣言時のジェネリクスで指定された型パラメータまたはObject型が型パラメータとして与えられるのでvarは使用可
⑬varは予約語でないので、変数名として使用可
⑭ラムダ式からは型推論ができないので、変数名として使用可
⑮varはfinalのみ修飾子を使うことが可能
⑯メソッドの引数にvarは使えない
まとめ
varの制約は多いけれども、試験でよく問われるところなので、覚えよう!