Re: Named fields in enum constant declarations
On Wed, 15 Apr 2009 10:56:37 -0700, Patricia Shanahan <pats@acm.org>
wrote:
In order to build a data visualization, I need to associate both an
arbitrary integer and a color with each of several conditions. Sounds
like a job for an enum. As currently written, I have unnamed Color
constructor calls as arguments in the enum constant declarations, e.g.
TRUE_POSITIVE(new Color(100, 255, 100))
I would prefer to replace that with something like:
TRUE_POSITIVE(LIGHT_GREEN)
but I don't know where to put the declaration:
private static final LIGHT_GREEN = new Color(100,255,100);
The enum syntax requires the enum constant declarations to be the first
thing in the body. They cannot forwards reference a field declaration.
The actual colors are naturally private to the enum - the rest of the
program just knows the fact that each enum constant has a method that
returns the associated color.
What am I missing? What is the right way to do this?
Patricia
Yet another method...Implement an Interface that defines the colors
public interface IColors {
Color LIGHT_GREEN = new Color(100,255,100);
}
public enum Stuff implements IColors {
TRUE_POSITIVE(LIGHT_GREEN);
private Color thisColor;
private Stuff(Color color) {
thisColor = color;
}
}
Jim