LoginSignup
24
21

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-21

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/
splash.png

Java 14 プロジェクトの作成

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

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

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();
        }
    }
}
24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21