OpenJDK 13の5つの重要機能
350: Dynamic CDS Archives
351: ZGC: Uncommit Unused Memory
353: Reimplement the Legacy Socket API
354: Switch Expressions (Preview)
355: Text Blocks (Preview)
上記の中でも本日は「Switch Expressions (Preview)」を見ていきたいと思います。
Switch Expressions (Preview)
- JDK 12でもPreviewでしたか13でもPreviewですね。
- Previewなので--enable-previewのオプションを与えないと使えないらしいです。
・Arrow labels
static void howMany(int k) {
switch (k) {
case 1 -> System.out.println("one");
case 2 -> System.out.println("two");
default -> System.out.println("many");
}
}
従来の「case L:」をよく使用していましたが、「case L->」のようにも使えるようになりました。
ただ、「case L->」のような書き方をするとfull throughがないためbreakを書かなくてもよいらしいです。
呼び出すときは以下となります。
howMany(1);
howMany(2);
howMany(3);
結果
one
two
many
・Switch expressions
switchがexpressionで使えるようになりました。
static void howMany(int k) {
System.out.println(
switch (k) {
case 1 -> "one"
case 2 -> "two"
default -> "many"
}
);
}
なので、switch文の結果を変数に代入することもできます。
T result = switch (arg) {
case L1 -> e1;
case L2 -> e2;
default -> e3;
};
・Yielding a value
「yield」キーワードが追加されました。
int j = switch (day) {
case MONDAY -> 0;
case TUESDAY -> 1;
default -> {
int k = day.toString().length();
int result = f(k);
yield result; // switch文の戻り値を設定
}
};
「yield」は"case L:"式のswitch文の中でも使用できます。
int result = switch (s) {
case "Foo":
yield 1;
case "Bar":
yield 2;
default:
System.out.println("Neither Foo nor Bar, hmmm...");
yield 0;
};