Java10で型推論を使ってみた
Java10がリリースされ、型推論ができるようになったみたいなので、その動作確認です。
■型推論とは
データ型を宣言せず、代入する値などでデータ型を自動的に決定してくれる仕組みです。
Javaではローカル変数のみで使用可能で、変数宣言時にデータ型のところに「var」と記述します。
例) var num = 10;
では確認してみましょう!
JDKのダウンロードは以下から可能です
http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html
■TypeInferenceSample01.java
public class TypeInferenceSample01 { public static void main(String[] args) { var x = 10; var y = 20; var z = 3.0; int sum = x + y; System.out.println(sum); var quotient = x / z; System.out.println(quotient); System.out.println((int)quotient); } }
【実行結果】
30
3.3333333333333335
3
おおお、実行できました。
計算、暗黙的型変換、キャストもできています。
■TypeInferenceSample02.java
public class TypeInferenceSample02 { public static void main(String[] args) { var str = "文字列"; var num = Integer.valueOf(10); var obj = (Object) str; System.out.println(obj); System.out.println(num.toString()); } }
【実行結果】
文字列
10
参照型も動いています。
■TypeInferenceSample03.java
import java.util.ArrayList; public class TypeInferenceSample03 { public static void main(String[] args) { var numList = new ArrayList<>(); numList.add(10); numList.add(20); int sum = 0; for(int num : numList) { sum += num; } System.out.println(sum); } }
【実行結果】
エラー: 不適合な型: Objectをintに変換できません:
ですよねー。
ArrayListがインスタンス化される段階で型パラメータの値が決まるわけですもんね。
int型のリテラルを格納してますが、Integerにautoboxingされ、そこからObject型に型変換されちゃってます。
ちなみにダイヤモンド演算子を使わず、右辺のジェネリックスにIntegerを指定したら実行できました。
var numList = new ArrayList<Integer>();
また何か気がついたことがあれば記述したいと思います!