[英]Cannot refer to the static enum field Cbev2Key.log within an initializer
[英]Cannot refer to the static enum field within an initializer?
我剛剛得到Java5項目有這個錯誤,我嘗試使用Java5和Java6,但它仍然存在。 它以某種方式工作(因為它是在svn),我怎么能繞過編譯器錯誤?
不要“繞過”錯誤 - 它不會做你想要的。 錯誤是有充分理由的。
枚舉值在任何其他靜態字段之前初始化。 如果你想做一些事情,比如將所有值添加到地圖中,請在靜態初始化程序之后執行其他操作:
import java.util.*;
public enum Foo
{
BAR, BAZ;
private static final Map<String, Foo> lowerCaseMap;
static
{
lowerCaseMap = new HashMap<String, Foo>();
for (Foo foo : EnumSet.allOf(Foo.class))
{
// Yes, use some appropriate locale in production code :)
lowerCaseMap.put(foo.name().toLowerCase(), foo);
}
}
}
另一種“繞過”它的方法,如果你需要一個計數器或需要在每個初始化時運行的東西,就是創建一個私有靜態內部類,如下所示:
public enum Foo {
BAR, BAZ;
private static final class StaticFields {
private static final Map<String, Foo> lowerCaseMap = new HashMap<>();
private static int COUNTER = 0;
}
private Foo() {
StaticFields.lowerCaseMap.put(this.name().toLowerCase(), this);
StaticFields.COUNTER++;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.