Skip to content

About

このリポジトリは、Javaメジャーバージョンアップで導入された主要な新機能や構文変更を、実際に動作するサンプルコードとともにまとめたものです。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Java Version Features Summary (Java 8 - Java 25)

このリポジトリは、Java 8 から Java 25 にかけて導入された主要な新機能や構文変更を、実際に動作するサンプルコードとともにまとめたものです。

📋 バージョン別の主な変更点

Java 8 (2014)

  • ラムダ式 (->): 匿名クラスを簡潔に表現し、関数型プログラミングを可能にしました。
  • Stream API: コレクションの宣言的な一括処理(フィルタ、マッピング、集計など)をサポートします。
  • Optional クラス: NullPointerException を安全に回避するためのコンテナオブジェクトが導入されました。

Java 11 (2018, LTS)

  • String クラスの拡充: isBlank(), strip(), lines() などの便利な文字列操作メソッドが追加されました。
  • ラムダ引数での var 利用: ローカル変数型推論(Java 10導入)がラムダ式の引数にも拡張されました。
  • HTTP Client API (標準化): 従来の HttpURLConnection に代わる、非同期対応の新しい HTTP クライアントが標準化されました。
  • 単一ファイルの直接実行: ソースコードファイルを直接 java Hello.java のようにコンパイルなしで実行可能になりました。

Java 14 (2020)

  • switch 式: 値を返すことができ、アロー構文(->)によって break が不要な、簡潔で安全な switch 構文が導入されました。
  • Text Blocks ("""): 複数行にわたる文字列(HTMLやJSONなど)をエスケープなしで直感的に記述できるようになりました(Java 14では第2弾プレビュー、Java 15で正式導入)。

Java 16 (2021)

  • Record クラス: データを保持するための不変(Immutable)なクラスを、ゲッター、equals(), hashCode(), toString() を含めて自動生成・簡潔に宣言できます。
  • instanceof のパターンマッチング: 型チェックと同時に、キャストされた変数への代入をワンステップで行えるようになりました。

Java 17 (2021, LTS)

  • Sealed クラス・インターフェース: sealed と permits を用いて、どのクラスがそのクラス/インターフェースを継承・実装できるかを明示的に制限できるようになりました。switch式と組み合わせることで、網羅性チェック(default 句の省略など)の恩恵を受けられます。

Java 21 (2023, LTS)

  • パターンマッチングの拡張(switch): switch 文/式において、型パターンを用いた分岐や case null の直接処理が可能になりました。
  • 仮想スレッド (Virtual Threads): オペレーティングシステムの物理スレッドに依存しない軽量なスレッド構造。何百万ものスレッドを低コストで同時並行処理させることができます。

Java 22 (2024)

  • 無名変数 (Unnamed Variables): 使用しない変数や例外オブジェクトをアンダースコア _ で明示的に置き換えることで、コードの意図をクリアにできます。
  • Stream Gatherers: 独自の Stream 中間操作(例: 一定件数ずつのウィンドウ処理など)を柔軟に定義・追加できる拡張ポイントが導入されました。

Java 24 (2024)

  • Stream Gatherers の拡張: Gatherers.windowSliding() など、より高度な Stream の中間操作が標準で提供されるようになりました。

Java 25 (2025)

  • モジュール単位の一括import: import module 構文で、java.base など特定のモジュール内のすべてのパッケージを一度にインポート可能になりました。
  • コンストラクタ内での super() 呼び出しより前のロジック: バリデーション処理などを super() 呼び出しの前に記述でき、より柔軟な初期化フローが実現できます。
  • Scoped Values の正式化(JEP 487): Java 21 でプレビュー機能だった ScopedValue が正式に採用されました。ThreadLocal よりも安全で効率的なスコープ付き値の管理が可能になり、リクエストスコープやコンテキスト伝播に活用できます。

About

このリポジトリは、Javaメジャーバージョンアップで導入された主要な新機能や構文変更を、実際に動作するサンプルコードとともにまとめたものです。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages