JDK 17の主要な新機能と改善点

言語機能の拡張

sealedクラスの正式導入

クラスやインターフェースの継承を明示的に制御できるsealedクラスが正式機能となりました。許可されたサブクラスのみが継承可能です。

public abstract sealed class GeometricShape 
    permits Circle, Triangle, Rectangle {}

public final class Circle extends GeometricShape {}
public final class Triangle extends GeometricShape {}
public final class Rectangle extends GeometricShape {}

switchパターンマッチング(プレビュー)

switch式で型パターンマッチングが可能になり、コードの簡潔化が図れます。

public String convertType(Object input) {
    return switch (input) {
        case Byte b -> "Byte: " + b;
        case Short s -> "Short: " + s;
        case Float f -> "Float: " + f;
        case String str -> "String: " + str;
        default -> "Unknown type";
    };
}

プラットフォームの強化

macOS/AArch64ポート

Apple Silicon(M1チップなど)ネイティブサポートが追加され、macOS上でのARM64アーキテクチャ実行が最適化されました。

macOSレンダリングパイプライン

macOSの2DグラフィックスレンダリングにMetal APIが採用され、OpenGLベースの旧実装から置き換えられました。

セキュリティとカプセル化

JDK内部APIの強制カプセル化

sun.*やその他内部APIへのアクセスがデフォルトでブロックされ、モジュールシステムの整合性が強化されました。

コンテキスト依存デシリアライゼーションフィルター

デシリアライゼーション操作にコンテキスト固有のフィルターを適用可能になり、セキュリティリスクの低減を実現します。

廃止予定機能

Applet APIの廃止

Applet関連APIが廃止予定となり、代替技術への移行が推奨されています。

Security Managerの廃止予定

歴史的なセキュリティモデルであるSecurity Managerが将来の削除を前提に廃止予定となりました。

インキュベータモジュール

外部関数&メモリAPI

ネイティブコードとの連携やメモリ操作を安全に行うAPIが提供されています。

ベクターAPI

ハードウェア支援によるベクトル演算を活用するAPIが第二インキュベータフェーズで提供されています。

タグ: Java17 sealed-classes pattern-matching JPMS deserialization-filter

7月20日 18:57 投稿