【Java】JDK 13のSwitch Expressions (Preview)を見てみましょう

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;
};

参考

コメントを残す