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>();
また何か気がついたことがあれば記述したいと思います!