Help us understand the problem. What is going on with this article?

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

参考

Anveloper
諦めなければできるだろう!
https://anveloper.wordpress.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away