switchを”文”ではなく”式”としても利用できるようにする String value; switch (key) { case "A": value = "alice"; break; case "B": value = "bob"; break; case "C": value = "charlie"; break; default: value = "unknown"; } String value = switch (key) { case "A" -> "alice"; case "B" -> "bob"; case "C" -> "charlie"; default -> "unknown; };
アプリケーションの終了時にAppCDSのアーカイブを生成する • 参考 “Building Class Data Sharing Archives with Apache Maven” https://logico-jp.io/2020/12/20/building-class-data-sharing-archives- with-apache-maven/
ターゲットOSに適した形式のインストーラーを生成するjpackage Windows: exe or msi Mac: pkg or dmg Linux: deb or rpm • jlinkで作成したカスタムランタイムを同梱できるため、インストー ラーだけ配布すればランタイムとアプリを同時にインストールできる
• NPEの原因となったnullがどこにあるのかメッセージに記載される • 例 Cannot invoke 'Object.getClass()' because the return value of 'Container.getObj()' is null container.getObj().getClass();のgetObj()がnullだとすぐに分かる • Java 14ではデフォルトは無効 -XX:ShowCodeDetailsInExceptionMessagesオプションで有効化する
class Point { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } } record Point(int x, int y) { }
かを指定する必要がある final: 非sealed classと同じく、他のクラスが継承することはできない non-sealed: 継承に制限はない sealed: permitsに指定したクラスのみ継承可能 • interfaceにも適用可能 public abstract sealed class Shape permits Circle, Rectangle, Square { } public final class Circle extends Shape { } public non-sealed class Rectangle extends Shape { } public sealed class Square extends Shape permits ... { }