This uber-conservative approach seems a pretty reasonable approach to me; after all, enums are a language feature, and Enum<T> is a constrained class (can't implement it directly), so it is not unreasonable to define its typing wrt its supertypes specially.

So, let's get back to Maurizio's original question, which is: At one point, we thought this feature was pretty cool, and invested some work in it.  Then we ran into a roadblock, and wrote it off.  Now, we've got a reasonable way to clear the roadblock. Which brings us back to:

 - Do we still like the features described in JEP 301?

And, if we're not sure about that, what can we do to get more sure?


There’s an even more conservative option: restrict this only to the type variable of Enum<T extends Enum<T>>, not just to the type variables of all supertypes of an enum.  Then, the asymmetry is undetectable, in that it is illegal for a non-enum class to extend Enum, right?

Yes, that would be the most conservative. If we took that path, I think a more direct way to describe/specify it, is to say that a raw enum reference (e.g. Foo) has a special direct supertype Enum<Foo> and leave all other rules untouched.

Maurizio


Reply via email to