エスケープ • 14でのPreview2で入った • 改行のエスケープ(¥) • スペース文字(¥s) • 行末のスペースは無視される • 行末にスペースが欲しいときは ‘¥s’を入れる var s = """ Lorem ipsum dolor ¥ sit amet consectetur ¥s """; var s = "Lorem ipsum dolor sit amet consectetur ";
次のバージョンでは • Sealed Classes(Java15でJEP360としてPreview) • 継承するクラスを限定できる(インタフェースでもよい) • Switch式でdefaultが不要になる public sealed class Shape permits Circle, Rectangle, Square {...} Shape rotate(Shape shape, double angle) { return switch (shape) { case Circle c -> c; // no action needed case Rectangle r -> r.rotate(angle); case Square s -> s.rotate(angle); } }
Pattern Matching for instanceof(Preview) • Kotlinのスマートキャストのような機能 Object o = "test"; if (o instanceof String s) { System.out.println(s.length()); } Object o = "test"; if (o instanceof String) { String s = (String) o; System.out.println(s.length()); }
これからのバージョンでは • Pattern with switch • switchでパターンマッチを使う • Deconstruction • レコードの分解 switch (obj) { case String s -> parseInt(s); case Integer i -> i; default -> 0; } switch (obj) { case Add(int l, int r) -> l + r; // record Add(int l, int r) case Sub(int l, int r) -> l - r; // record Sub(int l, int r) case Num(int i) -> i; // record Num(int i) default -> throw new UnsupportedOparation(); }
Helpful NullPointerException • JavaプログラマはNPEが大好きだけどメッセージが不親切 • Java 14ではNPEのメッセージが親切になる String s = null; println(s.length()); Exception in thread "main" java.lang.NullPointerException at Sample.main(mysample.java:4) String s = null; println(s.length()); Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "Sample.s" is null at Sample.main(mysample.java:4)