このリポジトリは、Java 8 から Java 25 にかけて導入された主要な新機能や構文変更を、実際に動作するサンプルコードとともにまとめたものです。
- ラムダ式 (
->): 匿名クラスを簡潔に表現し、関数型プログラミングを可能にしました。 - Stream API: コレクションの宣言的な一括処理(フィルタ、マッピング、集計など)をサポートします。
- Optional クラス:
NullPointerExceptionを安全に回避するためのコンテナオブジェクトが導入されました。
- String クラスの拡充:
isBlank(),strip(),lines()などの便利な文字列操作メソッドが追加されました。 - ラムダ引数での
var利用: ローカル変数型推論(Java 10導入)がラムダ式の引数にも拡張されました。 - HTTP Client API (標準化): 従来の
HttpURLConnectionに代わる、非同期対応の新しい HTTP クライアントが標準化されました。 - 単一ファイルの直接実行: ソースコードファイルを直接
java Hello.javaのようにコンパイルなしで実行可能になりました。
- switch 式: 値を返すことができ、アロー構文(
->)によってbreakが不要な、簡潔で安全な switch 構文が導入されました。 - Text Blocks (
"""): 複数行にわたる文字列(HTMLやJSONなど)をエスケープなしで直感的に記述できるようになりました(Java 14では第2弾プレビュー、Java 15で正式導入)。
- Record クラス: データを保持するための不変(Immutable)なクラスを、ゲッター、
equals(),hashCode(),toString()を含めて自動生成・簡潔に宣言できます。 - instanceof のパターンマッチング: 型チェックと同時に、キャストされた変数への代入をワンステップで行えるようになりました。
- Sealed クラス・インターフェース:
sealedとpermitsを用いて、どのクラスがそのクラス/インターフェースを継承・実装できるかを明示的に制限できるようになりました。switch式と組み合わせることで、網羅性チェック(default句の省略など)の恩恵を受けられます。
- パターンマッチングの拡張(switch): switch 文/式において、型パターンを用いた分岐や
case nullの直接処理が可能になりました。 - 仮想スレッド (Virtual Threads): オペレーティングシステムの物理スレッドに依存しない軽量なスレッド構造。何百万ものスレッドを低コストで同時並行処理させることができます。
- 無名変数 (Unnamed Variables): 使用しない変数や例外オブジェクトをアンダースコア
_で明示的に置き換えることで、コードの意図をクリアにできます。 - Stream Gatherers: 独自の Stream 中間操作(例: 一定件数ずつのウィンドウ処理など)を柔軟に定義・追加できる拡張ポイントが導入されました。
- Stream Gatherers の拡張:
Gatherers.windowSliding()など、より高度な Stream の中間操作が標準で提供されるようになりました。
- モジュール単位の一括import:
import module構文で、java.baseなど特定のモジュール内のすべてのパッケージを一度にインポート可能になりました。 - コンストラクタ内での super() 呼び出しより前のロジック: バリデーション処理などを
super()呼び出しの前に記述でき、より柔軟な初期化フローが実現できます。 - Scoped Values の正式化(JEP 487): Java 21 でプレビュー機能だった
ScopedValueが正式に採用されました。ThreadLocalよりも安全で効率的なスコープ付き値の管理が可能になり、リクエストスコープやコンテキスト伝播に活用できます。