为什么Java不能切换原语长?

时间:2012-12-19 11:28:42

标签: java switch-statement long-integer

  

可能重复:
  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;
    }
}

我理解长值的方式,它们和整数之间应该没有那么大差别。

4 个答案:

答案 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