SIMPLE

Java23新機能

10月にリリースされたJava23の新機能を確認していきましょう。

開発に直結しそうな変更内容をまとめました。

  1. 言語機能の強化: switch文やinstanceofでプリミティブ型のサポートが追加されました。

    プリミティブ型の判定が使えるようになったので、case int のように型判定できます。

    switch (x.getStatus()) {
        case 0 -> "okay";
        case 1 -> "warning";
        case int i -> "unknown status: " + i;
    }
    
    // 0, 1以外のint型という条件を指定できる.
    // 出力 : unknown status: 5
  2. StreamAPIの強化: Stream APIの中間操作が強化されています。

    Gatherersクラスが追加になっており、以下のような書き方ができます。

    Gatherersクラスには例のほかにも色々機能があるので調べてみてください。

    List<List<Integer>> windows =
        Stream.of(1,2,3,4,5,6,7,8)
          .gather(Gatherers.windowFixed(3))
          .toList();
    
    // 1~8の数字を3つのグループに分ける.
    // 出力: [[1, 2, 3], [4, 5, 6], [7, 8]]

  3. 簡易化: 短いコードでのmainメソッド記述が可能に。
    // 従来の書き方.  
    public static void main(String[] args) {
      System.out.println("Hello Java!");
    }
    
    // 短い書き方.
    void main() {
      println("Hello Java!");
    }

  4. コンストラクタの柔軟化: super(..) や this(..) などの明示的なコンストラクタ呼出しの前に処理を入れれるようになりました。
    // 従来の書き方.
    public class aaa extends bbb{
        public aaa(long value) {
            super(value);
            if (value <= 0) throw new IllegalArgumentException(..); // <-----これをsuperより前に書けなかった
        }
    }
    
    // 新しい書き方.
    public class aaa extends bbb{
        public aaa(long value) {
            if (value <= 0) throw new IllegalArgumentException(..);
            super(value);
        }
    }

  5. ツールの改良: JavaDocでMarkdown記述が可能に。
    /**
     * 従来の書き方.
     * <ul>
     *   <li>箇条書き1.
     *   <li>箇条書き2.
     *   <li>箇条書き3.
     * </ul>
     *
     * @return  返り値の説明.
     * @see     java.lang.Object#equals(java.lang.Object)
     */
    
    /// 新しい書き方.
    ///
    /// - 箇条書き1.
    /// - 箇条書き2.
    /// - 箇条書き3.
    /// @return  返り値の説明.
    /// @see     java.lang.Object#equals(java.lang.Object)

牧野

RPCブログ管理者