Cannot refer to the static enum field within an initializer?

匿名 (未验证) 提交于 2019-12-03 01:29:01

问题:

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++;     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!