> On Sep 9, 2020, at 12:15 PM, Brian Goetz <brian.go...@oracle.com> wrote:
> 
>> Remi points out that the System class (or, say, Objects) is a place we could 
>> put a factory method if we want one but don't want to risk adding it to 
>> Object.
> 
> Looking at it from the other direction, I am not sure having a nominal 
> SimpleIdentityObject class adds much value.  You can of course write a 
> do-nothing identity class yourself:
> 
>     class WednesdayIdentityClass extends Object { }
> 
> Will anyone want to extend SIO?  There's no point, since any concrete class 
> that extends Object already becomes an IdentityObject, so they'll just extend 
> Object.
> 
> Will anyone want to use it as a parameter type / type bound?  I doubt it; 
> they'll use IdentityObject.
> 
> Will anyone want to use it as a return type?  I don't see much point, because 
> there's nothing a SIO can do that Object can't.  The only reason we're 
> exposing it is as a replacement for `new Object()`, which we've deemed to be 
> an idiom only for getting a unique identity.  If we did nothing, people could 
> replace:
> 
>     Object lock = new Object();
> 
> with
> 
>     Object lock = new Object() { };
> 
> (and someone would brand it the "identity brace trick".)  But that's a little 
> too obscure, so recommending
> 
>     Object lock = Objects.newIdentity();
> 
> says exactly what you mean.  The precise typestate of the result is an 
> implementation detail; the key is that a new identity is dispensed.

Yes, this is all good from the language perspective. The outstanding bit is 
"what does the instruction 'new java/lang/Object' do?" The simple thing is for 
JVMS to say "an instance of java/lang/SimpleIdentityObject is created on the 
heap".

If the class is private, the JVM implementation still knows what it is, so 
that's probably okay, but what does JVMS say? I don't want to phrase it in a 
way that, say, lets a JVM implementation interpret 'new java/lang/Object' as 
'new java/lang/String' or something stupid like that.

Reply via email to