ニュース

Java 26、10のJEPを搭載:パターンマッチングの強化、finalフィールドの強制、Lazy Constants

JDK 26は2026年3月17日にリリースされ、プリミティブパターンマッチングの4回目のプレビュー、リフレクティブなfinalフィールド変更への警告、名称変更されたLazy Constants APIなど10のJEPを含む。

July 2, 2026· 1 min read· 出典: JavaTechOnline
Java 26、10のJEPを搭載:パターンマッチングの強化、finalフィールドの強制、Lazy Constants

Java 26は2026年3月17日にリリースされた。非LTSリリースであり、言語セマンティクス、セキュリティ強化、ランタイム改善にわたる10のJEPを詰め込んでいる。Oracleは6ヶ月間サポートし、その後は全員をJava 27に促す。以下が重要ポイントだ。

パターンにおけるプリミティブ型:4回目のプレビューで厳格化

JEP 530は、パターンマッチングをプリミティブで直接動作させる長期にわたる取り組みを継続する。この4回目のプレビューでは、2つの点が厳格化される:安全な型変換のための無条件の正確性と、コンパイル時に到達不能なケースを捕捉するswitch内の優位性チェックだ。

実用的な利点:ボクシングなしでプリミティブパターンを使ってObjectに対してswitchを記述でき、範囲を直接ガードできる:

Object price = 250;
switch (price) {
    case int p when p < 100  -> System.out.println("BUDGET: " + p);
    case int p when p < 500  -> System.out.println("MID: " + p);
    case int p               -> System.out.println("PREMIUM: " + p);
    case double d            -> System.out.println("Double price: " + d);
    default                  -> System.out.println("Unknown type");
}

コンパイラは、Java 25では黙ってコンパイルされていた以下のようなコードを拒否するようになった:

int i1 = 100;
switch (i1) {
    case float f   -> {}   // ERROR: 以下の定数が支配されている
    case 16_777_216 -> {}  // 到達不能 — floatはこの値を正確に表現できる
    default        -> {}
}

コードベースでパターンマッチングを多用している場合、アップグレード後にいくつかの新しいコンパイルエラーが発生することを予想しておこう。

JEP 500:finalを本当にfinalにする

深いリフレクションにより、ライブラリは長年にわたってfinalフィールドをバイパスしてきた。Java 26はその抜け穴を塞ぎ始める。デフォルトでは、finalフィールドのリフレクティブな変更は警告を出力する:

WARNING: Final field value in class Box has been mutated reflectively
WARNING: Use --enable-final-field-mutation=ALL-UNNAMED to avoid a warning
WARNING: Mutating final fields will be blocked in a future release

動作は--illegal-final-field-mutationwarn(デフォルト)、allowdenyのいずれかに設定して制御できる。将来のリリースではdenyをデフォルトにする計画だ。リフレクティブなフィールド変更に依存するフレームワーク(一部のシリアライゼーション、ORM、インジェクションライブラリ)を使用している場合は、今すぐテストし、上流で修正するか警告を抑制しよう。

JEP 526:Lazy Constants(2回目のプレビュー)

「Stable Values」(Java 25のJEP 502)から名称変更されたLazy Constantsは、値が遅延計算されるが、その後JVMによって真の定数として扱われるオブジェクトを定義できるようにする。これにより、定数畳み込みなどの最適化が可能になる。APIは簡素化されており、不変のホルダーを返すLazyConstantファクトリが期待される。これはまだプレビューであるため、使用するには--enable-previewが必要だ。

言及に値するその他のJEP

残りのJEPは、ライブラリとセキュリティの改善をカバーしている:KeyStore APIの更新、新しいVectorインキュベータモジュール、非推奨のSecurityManagerコードのクリーンアップ。どれも見出しを飾るものではないが、モダンなJavaスタックを維持するチームの負担を軽減する。

結論

Java 26は堅実な短期リリースだ。パターンマッチングの厳格化とfinalフィールドの強制は、既存のコードを壊す可能性が最も高い2つの変更である——良い意味で。CIパイプラインをアップグレードし、警告をスキャンし、今年後半のLTSジャンプであるJava 27に備えよう。