2

可能重复:
为什么你的 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;
    }
}

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

4

4 回答 4

5

根据 Java 7,您可以使用字符串:LINK TO ORACLE

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

于 2012-12-19T11:36:54.967 回答
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;
    }
  }
}
于 2012-12-19T11:58:50.533 回答
2

JVM 规范说: Java 虚拟机的 tableswitch 和 lookupswitch 指令只对 int 数据进行操作。

于 2012-12-19T11:35:15.100 回答
0

因为 Java 不希望您切换 long 可以包含的许多选项,所以他们将其限制为 ints

于 2012-12-19T11:36:05.167 回答