Generics in enums

Victor Polischuk victor2 at ukr.net
Wed May 29 07:51:45 UTC 2013




Greetings,

>


>

Some time ago I wanted to migrate our "commons-lang" enums to "java 5"
enumerations, but I encountered an issue that it cannot be done without
discarding generics since java enums do not support them. Let me show an
example:

>

//------

>

public final class ColorEnum<T extends Pixel> extends
org.apache.commons.lang.enums.Enum {
public static final ColorEnum<PurePixel> RED = new
ColorEnum<PurePixel>("Red");
public static final ColorEnum<PurePixel> GREEN = new
ColorEnum<PurePixel>("Green");
public static final ColorEnum<PurePixel> BLUE = new
ColorEnum<PurePixel>("Blue");
public static final ColorEnum<MixedPixel> WHITE = new
ColorEnum<MixedPixel>("White") {

>

@Override

>

public MixedPixel make() {...} 

>

};

private ColorEnum(String color) {super(color);}

>


>

public boolean filter(T pixel) {...}

>


>

public T make() {...}
}

>

//------

>

And I wonder if there is a specific reason why I cannot convert it into
something like: 

>

//------

>

>

public enum Color<T extends Pixel> {
RED<PurePixel>("Red"),
GREEN<PurePixel>("Green"),

>

BLUE <PurePixel>("Blue"),

>

WHITE<MixedPixel>("White") {

>

>

@Override

>

public MixedPixel make() {...} 

> };


private Color(String color) {...}

>


>

public boolean filter(T pixel) {...}

>


>

public T make() {...}
}

> //------

Thank you in advance.

>


>


>

Sincerely yours,

>

Victor Polischuk

>



More information about the core-libs-dev mailing list