为什么这个 int 开关有效:
public class Foo {
private final static int ONE = 1;
private final static int TWO = 2;
public static void main(String[] args) {
int value = 1;
switch (value) {
case ONE: break;
case TWO: break;
}
}
}
虽然这个枚举开关不是:
import java.lang.annotation.RetentionPolicy;
public class Foo {
private final static RetentionPolicy RT = RetentionPolicy.RUNTIME;
private final static RetentionPolicy SRC = RetentionPolicy.SOURCE;
public static void main(String[] args) {
RetentionPolicy value = RetentionPolicy.RUNTIME;
switch (value) {
case RT: break;
case SRC: break;
}
}
}
我知道这种情况下发生的事情必须是一个常量,那么为什么我可以使用“final static int”作为常量而不是“final static
最佳答案
因为 case 语句标签必须具有编译时常量或 EnumConstantName。 JLS 14.11
编译时间常数只能是字符串和原始类型,如 JLS 15.28 所述.因此,您不能使用静态 final
关于java - 为什么 "final static int"可以用作开关的大小写常数,但不能用作 "final static <your enum>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4401743/