Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 15について軽く/ Java 15 breaf introduction

9e840766611f942c7c0a9ad6987a5d78?s=47 Naoki Kishida
September 18, 2020

Java 15について軽く/ Java 15 breaf introduction

2020/9/18に開催されたJavaコミュ@福岡オンライン飲み会での登壇資料です

9e840766611f942c7c0a9ad6987a5d78?s=128

Naoki Kishida

September 18, 2020
Tweet

Transcript

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

  2. 自己紹介 • きしだ なおき(@kis) • LINE Fukuoka • 最近 洗濯機を買って、ベランダ置きの

    洗濯機は台風で汚れるということを知る
  3. Java 15 • 2020/9/15リリース • non-LTS • 次は17(Sept.2021) • 14のJEP

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

    • 新規は4つ • 更新6 • 機能削除4 http://openjdk.java.net/projects/jdk/15/ 新規 新規 新規 新規
  5. 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
  6. Sealed Classes • 継承できるクラスを限定する public abstract sealed class Shape permits

    Circle, Rectangle, Square {...}
  7. 現状では使い道なし • 本当は次のように書けるといい String getName(Shape s) { if (s instanceof

    Circle) { return "円"; } else if (s instanceof Rectangle) { return "四角"; } else if (s instanceof Square) { return "正方形"; } }
  8. 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 "正方形"; } }
  9. Text Blocks(Standard) • 複数行のテキスト • ダブルクオート3つで囲む • Java 14から変更なし """

    <head> <title>Java 14</title> </head> """
  10. Records(2nd Preview) • データをやりとりするための型 • イミュータブル(値が変更できない) • 名前付きタプル • Case

    class(Scala) やData class(Kotlin), @Value(Lombok)
  11. 定義 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 }
  12. 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()); }