2009-02-11 56 views
39

我剛剛得到了有這個錯誤的Java5項目,我嘗試過使用Java5和Java6,但它仍然存在。它工作之前(因爲它是在svn),我怎麼能繞過該編譯器錯誤?無法在初始化程序中引用靜態枚舉字段?

+0

這可能有助於發佈您的代碼多數民衆贊成示數 – tddmonkey 2009-02-11 11:55:44

+0

你能提供一個小的代碼示例你想要什麼實現? – 2009-02-11 11:56:22

回答

70

不要「繞過」錯誤 - 它不會做你想做的事情。這個錯誤是有原因的。

枚舉值在任何其他靜態字段之前被初始化。如果你想要做的事,如添加的所有值到一個地圖,做一個靜態初始化一切:

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); 
     } 
    } 
} 
6

另一種方式來「搭橋」吧,如果你需要,例如計數器或一些需要在每個initalization運行,是創建一個私有靜態內部類,像這樣: