【发布时间】:2011-04-19 03:35:12
【问题描述】:
所以,我正在研究这个有一些静态常量的类:
public abstract class Foo {
...
public static final int BAR;
public static final int BAZ;
public static final int BAM;
...
}
然后,我想要一种基于常量获取相关字符串的方法:
public static String lookup(int constant) {
switch (constant) {
case Foo.BAR: return "bar";
case Foo.BAZ: return "baz";
case Foo.BAM: return "bam";
default: return "unknown";
}
}
但是,当我编译时,我在 3 个 case 标签上都收到了 constant expression required 错误。
我知道编译器需要在编译时知道表达式才能编译开关,但为什么 Foo.BA_ 不是常量?
【问题讨论】:
-
在这种情况下有什么理由不使用枚举?
-
我认为 Java 没有枚举。
public static final ints 分散在整个 JDK 中,所以我就是这样做的。 -
并阅读 Effective Java (java.sun.com/docs/books/effective),第 30 项:使用枚举而不是 int 常量
-
谢谢大家的建议,我会去看看的。
标签: java compile-time-constant