I just got Java5 project that has this error, i tried using Java5 and Java6, but its still there. it worked somehow before(since it was in svn), how can i bypass that compiler error?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Don't "bypass" the error - it won't do what you want it to. The error is there for good reason.
The enum values are initialized before any other static fields. If you want to do something like adding all the values into a map, do it in a static initializer after everything else:
import java.util.*; public enum Foo { BAR, BAZ; private static final Map lowerCaseMap; static { lowerCaseMap = new HashMap(); for (Foo foo : EnumSet.allOf(Foo.class)) { // Yes, use some appropriate locale in production code :) lowerCaseMap.put(foo.name().toLowerCase(), foo); } } } 回答2:
Another way to "bypass" it, if you need for example a counter or something that needs to run on each initalization, is to create a private static inner class, like so:
public enum Foo { BAR, BAZ; private static final class StaticFields { private static final Map lowerCaseMap = new HashMap(); private static int COUNTER = 0; } private Foo() { StaticFields.lowerCaseMap.put(this.name().toLowerCase(), this); StaticFields.COUNTER++; } }