views:

926

answers:

2

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?

+11  A: 

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<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);
        }
    }
}
Jon Skeet
Jon - do you know why this error doesn't occur in Eclipse 3.3 but does in 3.4?
MrWiggles
A: 

Sorry to up this, I found it via google, but it seems to work when the private static final field is a primitive type. Does anyone have an idea why ?

Norswap