The logical conclusion is that java.lang.Object is a parametric class with a 
parameter saying if it should implement IdentityObject or not.

Magic hammer, meet nail :)

To be explicit, what you're suggesting is something like

    class Object<ID : boolean> { ... }

where an identity class extends Object<true> and a primitive class extends Object<false> (and most interfaces remain parametric in ID.)

Its conceptually elegant, and we've discussed it before; in theory parametricity could range over things other than types, such as constants, identity-ness, etc (e.g., the ref and val projections could be species).  But to apply it to a problem as prosaic as this seems like cracking a walnut with a two-ton bomb.  (I don't thing this is what you want to teach on day 1.)


Reply via email to