增强型 switch 语句可以有多个赋值吗?

All*_*iao 5 java switch-statement java-13

我正在尝试使用增强的 switch 语句初始化两个变量:

int num = //something

boolean val1;
String val2;

val1, val2 = switch(num) {
    case 0 -> (true, "zero!");
    case 1 -> (true, "one!");
    default -> (false, "unknown :/");
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Nam*_*man 5

由于您已经在使用 Java-13,我建议不要使用额外的库来表示元组,并使用Map.entry(在 Java-9 中引入)和var推断出的局部变量类型的语法糖。

var entry = switch (num) {
    case 0 -> Map.entry(true, "zero!");
    case 1 -> Map.entry(true, "one!");
    default -> Map.entry(false, "unknown :/");
};
boolean val1 = entry.getKey();
String val2 = entry.getValue();
Run Code Online (Sandbox Code Playgroud)


ern*_*t_k 3

Java 中没有元组解包。仍然使用 switch 表达式的快速替代方案可以使用自定义类(Pair在以下示例中使用):

Pair<Boolean, String> val = switch (num) {
    case 0 -> Pair.of(true, "zero!");
    case 1 -> Pair.of(true, "one!");
    default -> Pair.of(false, "unknown :/");
};

boolean val1 = val.getLeft();
String val2 = val.getRight();
Run Code Online (Sandbox Code Playgroud)