2009-02-11 58 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运行,是创建一个私有静态内部类,像这样: