可能重复:
Why can’t your switch statement data type be long, Java?
为什么这样的事情不可能?
private void importantFunction( long arg1 ) {
switch (arg1){
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
//do default stuff
break;
}
}
我理解长值的方式,它们和整数之间应该没有那么大差别。
答案 0 :(得分:4)
根据Java 7,您可以使用字符串:{{3p>
所以基本上这会允许{{1p>
答案 1 :(得分:4)
Java可以拥有许多很多功能。语言设计是实用性和复杂性之间的一系列连续权衡。添加太多功能,语言变得难以学习和实现。
显然,可以有一个只有几个可能值的long,因此将它用作switch表达式是合理的,但这是不寻常的。主要是,当int的值太多时,使用long,并且切换表达式的值太多了。
一个解决方案是Map,它将您想要使用的long的值映射到一小组Integer值:
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
final int ONE_CASE = 3;
final int ANOTHER_CASE = 4;
Map<Long, Integer> map = new HashMap<Long, Integer>();
map.put((long) 1e10, ONE_CASE);
map.put((long) 1e11, ANOTHER_CASE);
long arg1 = (long) 1e11;
switch (map.get(arg1)) {
case 3:
System.out.println("ONE_CASE");
break;
case 4:
System.out.println("ANOTHER_CASE");
break;
}
}
}
答案 2 :(得分:2)
JVM spec says: Java虚拟机的tableswitch和lookupswitch指令仅对int数据起作用。
答案 3 :(得分:0)
因为Java不希望你像long那样包含那些许多选项,所以他们将它限制为ints