为什么Java不能切换原始long?

Rob*_*der 2 java switch-statement long-integer

可能的重复:
为什么你的 switch 语句数据类型不能很长,Java?

为什么这样的事情是不可能的?

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)

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

小智 5

根据 Java 7,您可以使用 String: LINK TO ORACLE

所以基本上这将允许 String.valueOf(23423423L);


Pat*_*han 5

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)