【发布时间】:2011-05-23 01:14:57
【问题描述】:
为什么这个 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
【问题讨论】:
-
我为什么要问你想使用静态变量 RT 而不是 RUNTIME?
-
因为我有一个枚举键 {ZERO, ONE, TWO,...} 代表电话键,并且根据上下文每个键可能意味着一件事或另一件事,所以我用更多声明常量有意义的名字,例如RETURN_TO_MAIN_MENU = Key.ZERO 以便通过阅读案例 RETURN_TO_MAIN_MENU: 而不是案例零:
标签: java enums constants case switch-statement