增强的switch语句可以有多个值分配吗?

问题描述 投票:3回答:3

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

int num = //something

boolean val1;
String val2;

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

这可能吗?

java switch-statement java-13
3个回答
2
投票

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

Pair

1
投票

简短的回答,不,据我所知,java不支持任何方式的多重分配。一种解决方法是在巫婆中构造一个容器类来存储字符串和布尔值。

示例

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();

并返回包含两者的对象。

或者潜在地,您可以使用数组和类型转换,或结构不同的语句。

class Response 
{
    String message;
    bool found;
}

0
投票

由于您已经在Java-13上,我建议不要使用附加的库来表示元组,而应将 switch(num) { case 0: val1 = true; val2 = "zero!" break; case 1: val1 = true; val2 = "one!" break; default: val1 = false; val2 = "unknown :/" break; } (在Java-9中引入)与推断出的局部变量类型Map.entry的语法糖一起使用。 。

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