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