varとは
ローカル変数の宣言時、変数の型の代わりに「var」と書くことで、型の指定を省略することができる。これを型推論という。
varの特徴
変数は必ず初期化する
var型で宣言した場合、宣言時は必ず値を代入し初期化をしなければならない。
command
var str = "" ; // 初期化OK
var str; // コンパイルエラー
nullは代入できない
nullの場合は、型を推論することができないためコンパイルエラーとなる。
command
var str = null ; // コンパイルエラー
異なる型を代入できない
String型からint型を変換できないためエラーになる。
command
var str ="10";
str = 10; // コンパイルエラー
ローカル変数のみ使用可能(メンバ変数には使えない)
command
public class Test1{
var str1 =""; // コンパイルエラー (メンバー変数)
void test() {
var str2 =""; // ローカル変数 OK
}
}
アクセス修飾子はつかない
※finalをつけることはできる。
command
public var str = "Programmer Life"; // コンパイルエラー(無効な修飾子)
配列は型を明記
command
var arr1[] = {"Hello"}; // コンパイルエラー(推論できない)
var arr2 = new int[3]; // OK int型と明記
var arr3 = new int[]{1,2,3}; // OK int型と明記
メソッドの引数に使用できない
command
void disp(var v) {} // コンパイルエラー(許可されていない)
匿名クラス
※ java.util.function.Supplierをimportしてテストしてください。
command
var obj2 = new Supplier() {
//メソッドをオーバーライド
@Override
public Integer get(){
return 10;
}
};
ラムダ式
※java.util.functionをimportする必要がある
command
var sup1 = () -> 10; // コンパイルエラー 型が推論できない
var sup2 = (Supplier)() -> 10; // OK Supplierの型でキャスト
var con = (Consumer)(var s) ->{ System.out.print(s);}; // OK ラムダ式の引数にvarは使用可能