Rob*_*der 2 java switch-statement long-integer
为什么这样的事情是不可能的?
private void importantFunction( long arg1 ) {
switch (arg1){
case 0:
// do stuff
break;
case 1:
// do other stuff
break;
default:
//do default stuff
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我理解长值的方式,它们和整数之间应该没有太大的区别。
Java 可以有很多很多特性。语言设计是实用性和复杂性之间的一系列连续权衡。加入太多功能,语言变得难以学习和实现。
显然,一个 long 可能只有几个可能的值,因此将它用作 switch 表达式是合理的,但这是不寻常的。主要是当 int 的值太多时使用 long,而 switch 表达式的值太多。
一种解决方案是使用 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)