【Java】ローカル変数の型推論まとめ

Java

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(); //短く書くことできる◎

コメント

タイトルとURLをコピーしました