【发布时间】:2014-06-29 19:22:01
【问题描述】:
有没有办法在 Java 枚举声明中定义静态最终变量(实际上是常量)?
我想要的是在一个地方定义 BAR(1...n) 值的字符串文字值:
@RequiredArgsConstructor
public enum MyEnum {
BAR1(BAR_VALUE),
FOO("Foo"),
BAR2(BAR_VALUE),
...,
BARn(BAR_VALUE);
private static final String BAR_VALUE = "Bar";
@Getter
private final String value;
}
对于上面的代码,我收到以下错误消息:Cannot reference a field before it is defined。
【问题讨论】:
-
为什么会有这么多具有相同值的枚举?这似乎完全违背了枚举的习惯!
-
错误文本是您问题的答案!
-
@Juvanis:注意每个枚举实例都有自己唯一的名称,所以我不认为它违反了枚举的习惯用法。在我的情况下, MyEnum 的实例充当映射的键,我还希望将这些键输出到外部目标。根据规范,这些输出值在某些情况下碰巧是相同的。
-
@KishanSarsechaGajjar:不,答案不存在。我试图将常量声明放在首位,但又出现了一个编译错误。
-
这个工程 public enum MyEnum { BAR1(MyEnum.BAR_VALUE), FOO("Foo"), BAR2(MyEnum.BAR_VALUE), BARn(MyEnum.BAR_VALUE);私有静态最终字符串 BAR_VALUE = "酒吧";私有最终字符串值; MyEnum(final String value){ this.value =value; } }