Slide 1

Slide 1 text

Java 15を軽く LINE Fukuoka きしだ なおき 2020/9/18 Javaコミュ@福岡オンライン飲み会

Slide 2

Slide 2 text

自己紹介 • きしだ なおき(@kis) • LINE Fukuoka • 最近 洗濯機を買って、ベランダ置きの 洗濯機は台風で汚れるということを知る

Slide 3

Slide 3 text

Java 15 • 2020/9/15リリース • non-LTS • 次は17(Sept.2021) • 14のJEP http://openjdk.java.net/projects/jdk/15/

Slide 4

Slide 4 text

Java 15 • 2020/9/15リリース • non-LTS • 次は17(Sept.2021) • 14のJEP • 新規は4つ • 更新6 • 機能削除4 http://openjdk.java.net/projects/jdk/15/ 新規 新規 新規 新規

Slide 5

Slide 5 text

JEP • 言語仕様 • Sealed Classes(Preview) • Text Blocks(Standard) • Pattern Matching for instanceof (Second Preview) • Records(Second Prevew) • API • Foreign Memory Access (Second Incubator) • Hidden Classes • Reinplement the Legacy DatagramSocket API • Edwards-Curve Digital Signature Algorithm • Remove the Nashorn JS Engine • JVM • Disable and Deprecate Biased Locking • ZGC(Production) • Shenandoah(Production) • Deprecate RMI Activation • OpenJDK • Remove Solaris and SPARK Ports • Tool • remove RMI stub compiler

Slide 6

Slide 6 text

Sealed Classes • 継承できるクラスを限定する public abstract sealed class Shape permits Circle, Rectangle, Square {...}

Slide 7

Slide 7 text

現状では使い道なし • 本当は次のように書けるといい String getName(Shape s) { if (s instanceof Circle) { return "円"; } else if (s instanceof Rectangle) { return "四角"; } else if (s instanceof Square) { return "正方形"; } }

Slide 8

Slide 8 text

swtichでパターンマッチングが使えるように なると便利 • Pattern matching for switchが導入されると、次のような switchがdefaultなしで書けるようになる String getName(Shape s) { switch (s) { case Circle c -> return "円"; case Rectangle r -> return "四角"; case Square q -> return "正方形"; } }

Slide 9

Slide 9 text

Text Blocks(Standard) • 複数行のテキスト • ダブルクオート3つで囲む • Java 14から変更なし """ Java 14 """

Slide 10

Slide 10 text

Records(2nd Preview) • データをやりとりするための型 • イミュータブル(値が変更できない) • 名前付きタプル • Case class(Scala) やData class(Kotlin), @Value(Lombok)

Slide 11

Slide 11 text

定義 public record Rec(String name, int count) {} public class Rec extends Record { private final String name; private final int count; Rec(String name, int count) { this.name = name; this.count = count; } String name() { return name; } String count() { return count; } // toString, equals, hashCode }

Slide 12

Slide 12 text

Pattern Matching for instanceof(2nd 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()); }