On 06/15/2017 02:44 PM, Peter Levart wrote:

enum Option implements Consumer<String> {
   D implements Generic<String>("-d", ...) { ... }
   PROC implements Generic<ProcOption>("-proc", ...) { ... }

   ...

}

Which is not too terrible (in fact has been put forward by John as a comment in the JEP [1]).


This is similar, but not the same. In above example, Generic<T> is not a subtype of Option. It's just an interface implemented by constant's subclasses. So you can not access Option members via an instance of Generic<T>... Generic<T> therefore has to declare all the interesting methods that can then be implemented by Option. You also have to accompany this solution with "sealed" interfaces if you don't want other implementations of Generic<T> besides the enum constants...

...in addition, you can not access/modify elements of EnumMap<Option, ...> using keys of type Generic<T> for example - you would have to cast which is awkward given that your example use case:

public Z get(Generic<Z> option) { ... }

...would probably do just that...

Regards, Peter

Reply via email to