Pleiades Eclipse 2020-03 リリース 〜 Java 14 新機能を試そう!


Pleiades All in One Eclipse 2020-03 をリリースしました。現在の Java 11 LTS から 2021 年の Java 17 LTS の移行に向けて、新機能を試しておきましょう。Pleiades All in One の Java Full Edition は解凍するだけで、Java のインストールや環境変数の設定が不要で Eclipse の各種設定も自動で行われるため、すぐに日本語化された Eclipse で Java 14 を利用できます。

Pleiades All in One ダウンロード
http://mergedoc.osdn.jp/

Java 14 プロジェクトの作成

デフォルトで設定済みの Java 6, 7, 8, 11, 14 から 14 を選択するだけです。
Java のダウンロードやインストール・パス設定などは不要です。

標準ではないプレビュー機能を使用する場合は、プロジェクトのプロパティーを設定します。
プロジェクト > 右クリック > プロパティー

Java コードテキストの貼り付け便利機能

これは昔からある機能なのですが、パッケージ・エクスプローラーのツリーの src 配下にファイルではなく、Java のソースコードテキストを直接貼り付けるだけで、以下の動作となり楽ちんです。右クリして 新規 > クラス > ダイアログ とか不要です。

  • 貼り付けたテキストの class 宣言に合わせて .java ファイルが作成される
  • 貼り付けたディレクトリ位置に合わせて package 宣言を書き換えてくれる
  • エディターが開く

Java 14 新機能

switch、レコード、テキストブロック、パターンマッチのサンプルコードです。
貼り付けて試しやすいように 1 クラスにしています。

import static java.lang.System.*;
import java.time.Month;

class Demo {

    public static void main(String[] args) {

        //--------------------------------------------------
        // switch (Java 14 標準)
        {
            // 複数ラベル - 結果: "Hello\nWorld\n"
            var i = 1;
            switch (i) {
                case 0, 1, 2: out.println("Hello");
                default :  out.println("World");
            }
        }
        {
            // アロー - 結果: Hello
            var i = 2;
            switch (i) {
                case  2 -> out.println("Hello");
                default ->  out.println("World");
            }
        }
        {
            // switch 式 - 結果: 大の月
            var month = Month.MARCH;
            String day = switch(month) {
                case APRIL, FEBRUARY, JUNE, NOVEMBER, SEPTEMBER -> "小の月";
                case AUGUST, DECEMBER, JANUARY, JULY, MARCH, MAY, OCTOBER -> "大の月";
            };
            out.println(day);
        }

        //--------------------------------------------------
        // record (Java 14 プレビュー)
        {
            // インナー record 定義
            record Point(int x, int y) {}

            // getter 自動生成 - 結果: 10
            out.println(new Point(10, 20).x());

            // toString 自動生成 - 結果: Point[x=10, y=20]
            out.println(new Point(10, 20));

            // equals 自動生成 - 結果: true
            out.println(new Point(10, 20).equals(new Point(10, 20)));
        }

        //--------------------------------------------------
        // テキストブロック (Java 14 セカンドプレビュー)
        {
            // 結果: "Hello\n    World"
            String s = """
                    Hello
                        World
                            """;
            System.out.println(s);
        }

        //--------------------------------------------------
        // instanceof パターンマッチ (Java 14 プレビュー)
        {
            // instanceof で代入 - 結果: 3
            Object object = 1;
            if (object instanceof Integer i) {
                out.println(i + 2);
            }
            // 型と値の複合条件
            if (object instanceof Integer i && i == 1) {
                out.println(i);
            }
        }

        //--------------------------------------------------
        // NullPointerException 詳細出力 (Java 14 標準)
        // 実行構成の VM 引数に -XX:+ShowCodeDetailsInExceptionMessages 追加
        // 結果:
        /*
        Exception in thread "main" java.lang.NullPointerException:
            Cannot invoke "String.length()" because "s" is null
                at Demo.main(Demo.java:78)
        */
        {
            String s = null;
            s.length();
        }
    }
}