Java14
2020/3/17にJava14がリリースされました。
Java14で追加された機能のうち、コードを書く上で使えそうな機能を紹介してみようと思います。
record(preview)
データ保持用のクラスが簡単に作ることができる。
public record Customer(String name, String age){}
以下のクラスと同等のものが作成される。
public class Customer {
private final String name;
private final String age;
public Customer(String name, String age) {
this.name = name;
this.age = age;
}
public String name() {
return this.name;
}
public String age() {
return this.age;
}
public String hashCode() {...}
public boolean equals() {...}
public String toString() {...}
}
値設定用のメソッドは定義されないため、インスタンス生成後に値を変更することはできない。
テキストブロック
改行を含んだ文字列を定義することができるようになった。
"ではなく"""で文字列を囲むとテキストブロックとして認識する。
String str1 = "aaaa\n"
+ "bbb";
String str2 = """
aaa
bbb\
"""
上記2つの文字列は同じことを示します。
改行をしたくない場合は場合は\を入れる。
Helpful NullPointerExceptions
NullPointerExceptionが発生した際のメッセージが詳細に出せるようになった。
String str = null;
str.length(); // NullPointerException
デフォルトでは以下のような例外が出力される。
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:5)
java14では「-XX:+ShowCodeDetailsInExceptionMessages」をつけて実行すると、以下のような詳細な例外が出力されるようになる。
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "<local1>" is null
at Test.main(Test.java:5)
パターンマッチングinstanceof(preview)
instanceofで型のチェックをしつつ、その型の変数を定義できるようになった。
Object obj = "obj";
if (obj instanceof String str){
System.out.println(str.length());
}