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
