在检查if
时,我需要将以下switch
-case
更改为String
,以提高圈复杂度。
String value = some methodx;
if ("apple".equals(value)) {
method1;
}
if ("carrot".equals(value)) {
method2;
}
if ("mango".equals(value)) {
method3;
}
if ("orange".equals(value)) {
method4;
}
但我不确定我会得到什么价值。
发布于 2012-04-20 13:09:44
Java (版本7之前)不支持switch/case中的字符串。但是您可以通过使用枚举来实现所需的结果。
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...
}
发布于 2012-04-20 13:09:35
学习使用else
。
由于value
永远不会同时等于两个不相等的字符串,因此只有5种可能的结果--一个对应于您关心的每个值,另一个对应于“以上任何一个都不是”。但是,因为您的代码不会消除无法通过的测试,所以它有16个“可能”路径(2 ^测试数量),其中大多数永远不会被遵循。
对于else
,唯一存在的路径是实际可能发生的5个路径。
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;
}
或者开始使用JDK7,它包括在switch
语句中使用字符串的能力。当然,Java会将switch
编译成类似if
/else
的结构……
发布于 2012-04-20 15:10:01
要降低圈复杂度,请使用map:
Map<String,Callable<Object>> map = new HashMap < > ( ) ;
map . put ( "apple" , new Callable<Object> () { public Object call ( method1 ( ) ; return null ; } ) ;
...
map . get ( x ) . call ( ) ;
或多态
https://stackoverflow.com/questions/10240538
复制相似问题