Making Object abstract
Remi Forax
forax at univ-mlv.fr
Thu Jun 17 11:40:09 UTC 2021
----- Mail original -----
> De: "John Rose" <john.r.rose at oracle.com>
> À: "Brian Goetz" <brian.goetz at oracle.com>
> Cc: "daniel smith" <daniel.smith at oracle.com>, "valhalla-spec-experts" <valhalla-spec-experts at openjdk.java.net>
> 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 oracle.com> 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:
>
> https://bugs.openjdk.java.net/secure/attachment/95170/Foo.java
> https://bugs.openjdk.java.net/browse/JDK-8268919
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
Rémi
More information about the valhalla-spec-observers
mailing list