LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

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

参考

0
0
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
0
0