我需要在检查 String
时将以下 if
更改为 switch
- case
,以提高圈复杂度 .
String value = some methodx;
if ("apple".equals(value)) {
method1;
}
if ("carrot".equals(value)) {
method2;
}
if ("mango".equals(value)) {
method3;
}
if ("orange".equals(value)) {
method4;
}
但我不确定我会得到什么 Value .
13 回答
Java(版本7之前)不支持switch / case中的String . 但是你可以通过使用枚举来达到预期的效果 .
学习使用
else
.由于
value
永远不会同时等于两个不相等的字符串,因此只有5种可能的结果 - 一个用于您关心的每个值,另外一个用于"none of the above" . 但是因为你的代码没有传递,它有16个"possible"路径(2 ^测试次数),其中大多数都不会被遵循 .使用
else
,存在的唯一路径是实际可能发生的5 .或者开始使用JDK 7,它包括在
switch
语句中使用字符串的功能 . 当然,Java只会将switch
编译成if
/else
类似的构造...现在每个人都至少使用Java 7,对吧?这是原始问题的答案:
Notes
case语句等同于使用
String.equals
.像往常一样,字符串匹配区分大小写 .
根据docs,这通常比使用链式
if
-else
语句更快(如cHao's answer) .要减少圈复杂度,请使用 Map :
或多态性
只是为了得到具体的emory答案,可执行代码如下:
其中user是POJO,然后是
最后被调用的方法是某个地方:
Java不支持带字符串的Switch-case . 我猜this链接可以帮到你 . :)
这是一种可能的1.7之前的方法,我不建议:
也许你可以在生成的代码中使用这样的技巧 . 否则我不推荐它 . 并非如此,哈希冲突的可能性让我担心,但如果某些事情混淆(剪切和粘贴),很难找到错误 . 931605不是一个好的文档 .
把它当作好奇心的概念证明 .
我们可以只在数据类型兼容的int上应用Switch:short,Shor,byte,Byte,int,Integer,char,Character或enum type .
使用switch语句评估
String
变量已在Java SE 7中实现,因此它仅适用于java 7.您还可以查看在JDK 7中如何实现此新feature .Java 8支持字符串switchcase .
不是很漂亮,但这是另一种方式: