JavaSilverの資格勉強中にわかりにくかったローカル変数の型推論についてまとめます。
Java SE 10より、変数宣言時のデータ型を推論する機能(ローカル変数の型推論)が追加されました。
varを使った型推論
varを使った型推論は、コンパイル時にコンパイラが代入演算子「=」の右辺から変数のデータ型を推論し、そのデータ型に置き換える機能です。
varを使った変数宣言方法は以下の例の通りです。
var a = 10;
※変数が初期化されいなかったり、nullで初期化したりするなど、データ型を特定できない場合はコンパイルエラーとなります。
var b; //コンパイルエラー
var c = null; //コンパイルエラー
メソッドの戻り値を受け取ることも型推論でできる
ローカル変数の型推論は、メソッドの戻り値を受け取るのにも使えます。(メソッドの定義から戻り値が判別できるため)
var d = sample();
配列の初期化式
配列の初期化式は、配列型変数の宣言と同時に記述することで、変数の型で宣言されている配列インスタンスを生成し、要素を初期化します。
なので、以下のように配列の初期化式を代入する変数をvarで宣言すると、何型の配列インスタンスを生成すればよいのか判断できず、コンパイルエラーになります。
var e = {1,2,3}; //型を特定できない。
ジェネリクスのダイアモンド演算子「<>」による型推論
ジェネリクスのダイアモンド演算子「<>」による型推論では、変数宣言時のジェネリクスで指定された型パラメータを参照します。
参照できる方情報がなければObject型がパラメータとして与えられます。
var f = new ArrayList<>();
var g= new ArrayList<Object>();
//上記のコードらは同じ意味を持つ。
varによる型推論は、ローカル変数の宣言にしか使えない。
varによる型推論は、ローカル変数の宣言にしか使えません。なので、フィールドの宣言にはvarを使って型推論を行うことができないです。引数宣言のコードもコンパイルエラーになります。
public class Sample {
//フィールドの宣言には型推論は使えない。
var name = "";
var price = 0;
//引数の型宣言に型推論は使えない。
public void test(var num){
System.out.println(num)
}
}
型推論メリットとデメリット
型推論のメリットはコードがすっきりすることです。
どんなに型名が長くてもvarと書くことによって省略できるのがメリットになります。
その分、コードの可読性が落ちるというデメリットがあるそうです。
ex)
StringBuilder sb = new StringBuilder();
↓
var sb = new StringBuilder(); //短く書くことできる◎
コメント