Oracleが「Oracle Code One 2019」にて発表したとおり、Java13がリリースされました。
[速報]Java 13が登場。ZGCの改善やSwitch式の実現など新機能。 Oracle Code One 2019 - Publickey
JDK 13 Documentation - Home
また、(あたりまえですが)OpneJDKにもJDKが配布されています。
ここでは、一先ずJava SE 13 (JSR 388)の言語仕様に絞って内容を抽出します。
主な変更点
今回のJDK13の変更点は少ないです。
JEP 354: Switch Expressions (Preview)
Extend switch so it can be used as either a statement or an expression, and so that both forms can use either traditional case ... : labels (with fall through) or new case ... -> labels (with no fall through), with a further new statement for yielding a value from a switch expression. These changes will simplify everyday coding, and prepare the way for the use of pattern matching (JEP 305) in switch. This is a preview language feature in JDK 13.
簡単にすると、switchが文が拡張されて式およびステートメントとして使用できます。
Java12でもJEP 325: Switch Expressions (Preview)にてPreview機能とされていましたが、再検討されて新たにPreview機能とされています。
再検討された内容であるJEP 354: Switch Expressions (Preview)を見てみますと下記のように記載されています。
To yield a value from a switch expression, the break with value statement is dropped in favor of a yield statement.
これは、switch文の分岐による値の返却を行う際に、{}ブロックで記述をする際の返却値を新たなyieldステートメントとして宣言して値を生成するものです。
以下、実装サンプル
import java.time.LocalDate;
import java.time.DayOfWeek;
public class Tester_01 {
    public static void main(String... args) {
        LocalDate today = LocalDate.now();
        System.out.println(java13(today.getDayOfWeek()));
    }
        private static int java13(DayOfWeek today) {
        int numLetters =  switch (today) {
            case MONDAY, FRIDAY, SUNDAY -> 6;
            case TUESDAY                -> 7;
            default                     -> {
                int k = today.toString().length();
                yield k;
            }
        };
        return numLetters;
    }
}
なお、Preview版なので、以下のように実行時は--enable-previewオプションが必要です。
workspace> javac --enable-preview --release 13 .\Tester_01.java
注意:.\Tester_01.javaはプレビュー言語機能を使用します。
注意:詳細は、-Xlint:previewオプションを指定して再コンパイルしてください。
PS C:workspace> java --enable-preview  Tester_01
JEP 355: Text Blocks (Preview)
Add text blocks to the Java language. A text block is a multi-line string literal that avoids the need for most escape sequences, automatically formats the string in a predictable way, and gives the developer control over format when desired. This is a preview language feature in JDK 13.
これまでは、複数行の文字列を記載する際には、"で囲っていた文字列("one-dimensional" string literals)を+演算子を用いて記載していたものを、"""("two-dimensional" block of text)で囲うことで+演算子を記載しなくてよくなりました。
従来までの記法
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("function hello() {\n" +
                         "    print('\"Hello, world\"');\n" +
                         "}\n" +
                         "\n" +
                         "hello();\n");
JEP355による記法
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
Object obj = engine.eval("""
                         function hello() {
                             print('"Hello, world"');
                         }
                         
                         hello();
                         """);
アノテーションを使用してSQLを実装する場合などに有用そうです。
※Kotlinではすでに対応しているものなので、この対応でKotlinの利便性にひとつ追いつく、といえるかも言えないです。
APIについては別途調査をしていきます。
不明点やおかしい記載内容がありましたら、お手数ですが編集リクエストをお願いいたします。
