エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Java14事前調査 JEP 305: Pattern Matching for instanceof (Preview)

環境

$ java -version
openjdk version "14-ea" 2020-03-17
OpenJDK Runtime Environment (build 14-ea+34-1452)
OpenJDK 64-Bit Server VM (build 14-ea+34-1452, mixed mode, sharing)
$ VER
Microsoft Windows [Version 10.0.18362.592]

JDK14

JDK 14

JEP 305: Pattern Matching for instanceof (Preview)

JEP 305: Pattern Matching for instanceof (Preview)

概要(超要約)

instanceof で型チェックする際に、型変換も同時にするようにしたよ。

なぜ入ったのか

今までの実装だと、下記のように String s = (String) obj; するケースが多かったと思う。

if (obj instanceof String) {
    String s = (String) obj;
    // use s
}

instanceof を使う場合、高確率でこういう使い方をやり、コードが煩雑になっていくことがある。
ダウンキャストがある状態は、参照してはいけない変数やメソッドが参照できるようになるので、あまりよろしくない。

テストコード

public class JEP305 {

  public static void main(String[] args) {
    Object obj = "hello saga!";
    
    if (obj instanceof String s) {
      System.out.println(s.length());
    } else {
      System.out.println("not String");
    }
  }
}

とりあえず、安定のhello sagaで。

実行

$ javac --enable-preview -source 14 JEP305.java 
$ java --enable-preview JEP305
11

変換したString型として使用できているのが分かる。

感想

もっと早く導入されていても良さそうが気がした対応では?と心のなかで感じた。