在 java 的开关大小写中使用字符串

2022-08-31 16:14:15

我需要将以下内容更改为 a - 同时检查 a ,以提高循环复杂性。ifswitchcaseString

String value = some methodx;
if ("apple".equals(value)) {
    method1;
}

if ("carrot".equals(value)) {
    method2;
}

if ("mango".equals(value)) {
    method3;
}

if ("orange".equals(value)) {
    method4;
}

但我不确定我会得到什么价值。


答案 1

Java(版本 7 之前)不支持 Switch/case 中的 String。但是,您可以通过使用枚举来获得所需的结果。

private enum Fruit {
    apple, carrot, mango, orange;
}

String value; // assume input
Fruit fruit = Fruit.valueOf(value); // surround with try/catch

switch(fruit) {
    case apple:
        method1;
        break;
    case carrot:
        method2;
        break;
    // etc...
}

答案 2

学习使用 .else

由于永远不会同时等于两个不相等的字符串,因此只有5个可能的结果 - 一个用于您关心的每个值,另一个用于“以上都不是”。但是,由于您的代码不会消除无法通过的测试,因此它有16个“可能”路径(测试数量为2 ^),其中大多数永远不会被遵循。value

有了 ,唯一存在的路径是实际可能发生的 5 条路径。else

String value = some methodx;
if ("apple".equals(value )) {
    method1;
}
else if ("carrot".equals(value )) {
    method2;
}
else if ("mango".equals(value )) {
    method3;
}
else if ("orance".equals(value )) {
    method4;
}

或者开始使用 JDK 7,其中包括在语句中使用字符串的功能。当然,Java无论如何都会编译成一个/like的构造...switchswitchifelse