2
4

More than 3 years have passed since last update.

コードを書く上で使えそうなJava14新機能

Posted at

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());
}
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4