Hello Victor,

On 5/29/2013 11:25 PM, Victor Polischuk wrote:
Greetings,

I beg pardon for the previous HTML mail.

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

You can approximate this effect by having your enum implement an interface or even a generic interface. For some examples in the JDK see, javax.tools.StandardLocation and java.nio.file.LinkOption.

HTH,

-Joe

Reply via email to