Good day Joe, Thank you for your prompt reply. If I understood you correctly, it is not the solution which can help me distinguish enum elements by type parameters. I would like to have restrictions on types which can be passed to a enum instance methods and reduce numbers of casts or "instanceof" checks for return values. In case of implementation of an interface I need to write something like: //---- public enum Color implements ColorAspect<Pixel> {...} //---- which is redundant since I can hardcode Pixel type everywhere within the enumeration but the initial intention is to specify type parameters for each enum value independently.
Sincerely yours, Victor Polischuk --- Original message --- From: "Joe Darcy" <joe.da...@oracle.com> Date: 30 May 2013, 09:44:57 > 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