On Nov 2, 2021, at 3:44 PM, Kevin Bourrillion 
<kev...@google.com<mailto:kev...@google.com>> wrote:


     new X().getClass() == X.class

Seems like part of the goal would be making it fit naturally with the current 
int/Integer relationship (of course, `42.getClass()` is uncommitted to any 
precedent).

It seems like `Complex.class` (as opposed to `Complex.ref.class`) would never 
be returned by `Object.getClass()` in any other condition than when you could 
have just written `Complex.class` anyway.

Actually, that makes me start to wonder if `getClass()` should be another 
method like `notify` that simply doesn't make sense to call on value types. 
(But we still need the two distinct Class instances per class anyway.)


Yep, you hit on a tricky spot there.  One part of the problem
is that getClass, specifically and uniquely, has a special relation
the the primitive types which is coupled to the typing of
class literals like int.class (which is Class<Integer> not Class<int>).
Also, Integer is a class, and Complex is a class, but they have
different “tilts”:  Integer is (kinda sorta) int.ref but Complex
is not Complex.ref, and the mirrors reflect this difference.

Sorting this out seems to be an overconstrained problem.

As you say, we have not yet applied “.getClass” to any
non-ref type, yet, but we will certainly do so, and that’s
when the fun begins.

Also, trying to retype int.class as Class<int> is a related
part of the fun.

In the end, however nicely we “heal the rift” between
good old int and his new friend Complex, there will
surely be some scars on good old int from his time
marooned (with just a few friends) in primitive-land.

(My current mental metaphor for the isolation of int
is Gilligan, who had about the same number of
unfortunate island-mates as int does.)

Reply via email to