[enhanced-enums]: Enhanced enums failure with raw types?

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Sep 11 20:38:19 UTC 2017



On 11/09/17 20:25, B. Blaser wrote:
> What do you think of this way of representing heterogeneous options?
I'm not convinced it works? In your example you have:

         EnumSet<G<Object>> g3 = EnumSet.allOf(G.class);


So, while it's true that the LHS is now well-formed, I think inference 
would still fail - as you get one equality constraint like this:

E = G<Object> (from LHS)

but another constraint is like this

E = G (from actual argument, whose type is Class<G> - raw type parameter)

And these two constraints are incompatible. You'd probably need to throw 
in a cast near G.class.

That said, even looking at the LHS, using Object (or any other 'ground' 
type that happens to be compatible with how the enum is used) works, but 
only until there's no bound in the enum declaration. If there's a bound, 
and the bound is a ground type you are still ok - as you can use that 
instead of Object, but if the bound is an f-bound, then I think you are 
out of luck.

Maurizio


More information about the amber-dev mailing list