Making Object abstract

Remi Forax forax at
Thu Jun 17 11:40:09 UTC 2021

----- Mail original -----
> De: "John Rose" <john.r.rose at>
> À: "Brian Goetz" <brian.goetz at>
> Cc: "daniel smith" <daniel.smith at>, "valhalla-spec-experts" <valhalla-spec-experts at>
> Envoyé: Mercredi 16 Juin 2021 23:50:35
> Objet: Re: Making Object abstract

> On Jun 2, 2021, at 7:57 AM, Brian Goetz <brian.goetz at> wrote:
>> A minor bikeshed comment: We're asking users to change their `new Object()` to
>> `IdentityObject.newIdentity()`, and they may ask "why do I have to say
>> 'Identity' twice"?  (And by ask, I mean grumble, because we're already asking
>> them to change their working code.)
>> After a few minutes of thought, I think it might be a better fit to put this at
>> Objects::newIdentity.  The methods in Objects are conveniences that users could
>> write themselves, which this basically is -- there's nothing special about this
>> method, other than having a preferred alternative to `new Object()` which users
>> will understand.  So parking this where the Object conveniences go seems
>> slightly lower friction.
> I think this is OK.
> As a stretch move, I think we can even retro-upgrade
> the type checking of Objects::newIdentity with type
> variable trickery, when IdentityObject becomes real.
> Please see:

I wonder if a simple way to avoid to allow any Ts if to allow to specify an intersection type as parameter type and/or return type of methods (we have 'var' inside the body)
so instead of

  public static <T extends Object & IdentityObject> T newIdentity() {

we can write
  public static Object & IdentityObject newIdentity() {

This requires a grammar change but it's exactly the type we want.

> — John


More information about the valhalla-spec-observers mailing list