39
我剛剛得到了有這個錯誤的Java5項目,我嘗試過使用Java5和Java6,但它仍然存在。它工作之前(因爲它是在svn),我怎麼能繞過該編譯器錯誤?無法在初始化程序中引用靜態枚舉字段?
我剛剛得到了有這個錯誤的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);
}
}
}
另一種方式來「搭橋」吧,如果你需要,例如計數器或一些需要在每個initalization運行,是創建一個私有靜態內部類,像這樣:
這可能有助於發佈您的代碼多數民衆贊成示數 – tddmonkey 2009-02-11 11:55:44
你能提供一個小的代碼示例你想要什麼實現? – 2009-02-11 11:56:22