Javaは古い言語だと思っていませんか。実は大きく進化しています。Records、Sealed Classes、パターンマッチングなど現代的な機能が続々と追加されました。しかもコード量を50%削減できる場面もあります。そこでJava.evolvedで学ぶモダンJavaの新機能と書き方の変化を整理します。

Recordsでデータクラスが劇的にシンプルに

従来のJavaではデータクラスの記述が冗長でした。具体的にはコンストラクタやgetter、equalsなどを手書きしていました。しかしRecordsならこれが1行で済みます。つまり10行以上の定型コードが消えるのです。

Recordsはjava 16で標準機能になりました。さらにコンストラクタやtoStringも自動生成されます。たとえば「record Person(String name, int age) {}」と書くだけです。また開発者の55%がすでに使用しているという調査もあります。特にDTOやバリューオブジェクトで威力を発揮します。

Sealed Classesで安全な継承制御を実現

Sealed ClassesはJava 17で導入されました。つまり継承できるクラスを明示的に制限する機能です。しかしなぜこれが重要なのでしょうか。具体的には意図しないサブクラスの作成を防げます。

たとえばShape型を定義して、Circle、Rectangle、Triangleだけに継承を許可できます。さらにサブクラスにはfinal、sealed、non-sealedのいずれかを指定します。そのため型の安全性が大幅に向上します。特にパターンマッチングと組み合わせると強力です。

パターンマッチングで条件分岐がスッキリ

パターンマッチングはJava 16からJava 21にかけて段階的に強化されました。まずinstanceofのパターンマッチングが登場しました。つまりキャスト不要で型チェックと変数束縛が同時にできます。しかしそれだけではありません。

Java 21ではswitch文での完全なパターンマッチングが実現しました。具体的にはnullチェックやガード条件も書けます。さらにRecordパターンで構造化データの分解もできます。したがって複雑な条件分岐がシンプルになります。特にSealed Classesと組み合わせるとdefault句が不要になります。

Virtual Threadsで並行処理が劇的に改善

Virtual ThreadsはJava 21で導入された軽量スレッドです。従来のスレッドはOSカーネルと1対1で対応していました。そのためメモリ消費が大きく大量生成は困難でした。しかしVirtual Threadsなら数百万のスレッドを生成できます。

具体的にはメモリ消費が数KBまで削減されます。特にI/Oバウンドな処理で威力を発揮します。たとえばWebサーバーやAPIゲートウェイに最適です。さらにJava 25ではStructured Task Scopeが完全実装される予定です。したがって構造化された並行処理が実現します。

3つの機能を組み合わせた実践例

Records、Sealed Classes、パターンマッチングは組み合わせることで真価を発揮します。たとえばAPIレスポンスの処理を考えましょう。まずSealed Interfaceで成功と失敗を定義します。次にRecordで各型のデータ構造を宣言します。

そしてswitch式のパターンマッチングで処理を分岐させます。つまりボイラープレートなしで型安全な処理が書けます。さらにSealed Classesのおかげでコンパイラが全パターンのカバーを保証します。このように3つの機能が連携して強力なコードになります。

2026年のJava採用動向とモダン化の波

2026年現在、Java 21の採用率は45%に達しています。またJava 17と合わせると80%がモダンバージョンです。さらに企業の62%がAI機能の実装にJavaを利用しています。しかもこの数字は2025年の50%から大幅に増加しました。

Java 25は2025年9月にLTSとしてリリースされました。特にポスト量子暗号対応やAI関連の強化が含まれます。したがってJavaは「枯れた言語」ではなく進化し続けている言語です。そのためモダンJavaの機能を積極的に活用していきましょう。