Java 8から21までの主要な変更点

技術的備忘録

Java 8 (LTS)

  1. ラムダ式

    • 関数型プログラミングをサポートする簡潔な構文が導入されました。
    (a, b) -> a + b
    
  2. ストリームAPI

    • コレクションに対する宣言的な操作が可能になりました。
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream().filter(n -> n % 2 == 0).sum();
    
  3. Optional

    • null安全性を向上させるためのクラスが導入されました。
  4. デフォルトメソッド

    • インターフェースにデフォルト実装を提供できるようになりました。
  5. 日付と時間のAPI

    • java.timeパッケージが導入され、日付と時間の操作が改善されました。

Java 9

  1. モジュールシステム(Project Jigsaw)

    • アプリケーションの依存関係を明示的に定義できるようになりました。
  2. jshell

    • 対話型のJavaシェルが導入されました。
  3. インターフェースの非公開メソッド

    • インターフェース内で非公開メソッドを定義できるようになりました。
  4. try-with-resourcesの改善

    • リソース変数をtry-with-resources文の外部で宣言できるようになりました。

Java 10

  1. var キーワード

    • ローカル変数型推論が導入されました。
    var list = new ArrayList<String>();
    

Java 11 (LTS)

  1. ラムダパラメータの型推論

    • ラムダ式のパラメータで型推論が可能になりました。
  2. HttpClient

    • 標準ライブラリにHttpClientが追加されました。

Java 12

  1. Switch式(プレビュー)

    • Switchをより表現力豊かに使用できるようになりました。

Java 14

  1. レコード(プレビュー)

    • 不変データ構造を簡潔に定義できるようになりました。
    record Point(int x, int y) {}
    
  2. パターンマッチング for instanceof(プレビュー)

    • instanceof 演算子とキャストを組み合わせて簡潔に記述できるようになりました。

Java 15

  1. テキストブロック

    • 複数行の文字列リテラルを簡単に定義できるようになりました。
    String json = """
                  {
                      "name": "John Doe",
                      "age": 30
                  }
                  """;
    

Java 16

  1. レコード(正式導入)
  2. パターンマッチング for instanceof(正式導入)

Java 17 (LTS)

  1. シールされたクラス

    • クラスの継承を制限できるようになりました。
    public sealed class Shape permits Circle, Rectangle, Triangle {}
    

Java 19

  1. 構造化並行処理(プレビュー)

    • 仮想スレッドを使用した軽量な並行処理が導入されました。

Java 21 (LTS)

  1. パターンマッチング for switch(正式導入)

    • switch文でのパターンマッチングが可能になりました。
    static String formatAny(Object obj) {
        return switch (obj) {
            case Integer i -> String.format("int %d", i);
            case Long l    -> String.format("long %d", l);
            case Double d  -> String.format("double %f", d);
            case String s  -> String.format("String %s", s);
            default        -> obj.toString();
        };
    }
    
  2. レコードパターン

    • レコードの分解と同時にパターンマッチングが可能になりました。
  3. 文字列テンプレート(プレビュー)

    • 文字列内で式を評価できるようになりました。
  4. 仮想スレッド(正式導入)

    • 軽量なスレッドを使用した並行処理が可能になりました。

これらの新機能により、Javaはより表現力豊かで、効率的なコーディングが可能になりました。

これもClaude3.5に書いて貰った文章です

これもClaude3.5 Sonnet に書いてもらった文章です。
Javaのことは、あまり詳しくないのですが、最も普及したJava8のシステムが多数存在する中、Javaのライセンス方針の変更に伴う混乱があり、しばらくJava8からJavaのアップグレードが停滞していた時期があると思います。
そのうちライセンスの混乱は収束し、現在は最新のJava21にアップグレードが始まった頃だと思います。
もし、Java8からJava21へシステムのマイグレーションをしている人がいれば、こんな情報が役に立つのではないかと思います。

ではまた。

タイトルとURLをコピーしました