如何为分配值的开关创建 case 语句的代码块?

问题描述 投票:0回答:1

如您所知,Java 12 引入了 switch 语句来生成可以分配的值。

但它似乎不适用于具有代码块的 case 语句。 我不确定我的语法是否正确或者这是不允许的。

我很好奇,因为它与非右值 switch 语句(第一个示例)不一致。 另外,我已经在其他语言中看到过这个。

    static void foo(String x) {
        // this works
        switch(x) {
            case "hi" -> {
                System.out.print("got hi");
                System.out.println("hello");
            }
            default -> System.out.println("bye");
        }

        // this works
        var y = switch(x) {
            case "hi" -> "hello";
            default -> "bye";
        };

        // is this possible?
        var z = switch(x) {
            case "hi" -> {
                System.out.println("got hi");
                return "hello";  // return "hello" to the z
            }
            default -> "bye";
        };
    }
java scope switch-statement
1个回答
0
投票

而不是

return
,关键字是
yield

var z = switch(x) {
    case "hi" -> {
        System.out.println("got hi");
        yield "hello";
    }
    default -> "bye";
};

这不仅仅适用于带有

-> { ... }
的开关。您也可以在带标签的 switch 表达式中使用它:

var z = switch(x) {
    case "hi":
        System.out.println("got hi");
        yield "hello";
    default:
        yield "bye"
};

另请参阅

© www.soinside.com 2019 - 2024. All rights reserved.