Ok nice, 
I suppose permittedSubclasses has been renamed to getPermittedSubclasses at the 
same time. 

Rémi 

> De: "Brian Goetz" <[email protected]>
> À: "Gavin Bierman" <[email protected]>, "Remi Forax" 
> <[email protected]>
> Cc: "amber-spec-experts" <[email protected]>, "joe darcy"
> <[email protected]>
> Envoyé: Vendredi 23 Octobre 2020 17:36:44
> Objet: Re: getPermittedSubclasses() on j.l.rClass returning an array of
> ClassDesc

> FTR: this was largely a "for consistency" decision, because nestmates does it
> the same way. (Which is to say, it was a deliberate suboptimal choice aimed at
> minimizing the number of API idioms that users of reflection had to deal 
> with.)

> On 10/23/2020 11:27 AM, Gavin Bierman wrote:

>> Just to follow this up; we have decided to change the signature of
>> permittedSubclasses to the following:

>> public Class<?>[] permittedSubclasses() {}

>> Thanks!
>> Gavin

>>> On 8 May 2020, at 23:53, Remi Forax [ mailto:[email protected] |
>>> <[email protected]> ] wrote:

>>> The current draft of the reflection API for the sealed keyword adds a method
>>> getPermittedSubclasses() [1] to java.lang.Class.

>>> I'm not fully sure that returning an array of ClassDesc is the right choice
>>> here, mainly for two reasons,

>>> 1/ it's weird to return an array of ClassDesc when all others similar 
>>> methods
>>> return an array of Class,
>>>   I know why a ClassDesc might be "better" because it avoid the class 
>>> loading,
>>>  but it also means that now to fully understand java.lang.Class, people has 
>>> to
>>>   understand how java.lang.constant works.
>>>  The java.lang.constant API was not designed for that, the first line of the
>>>  overview of this package talks about descriptors, constant pool and indy, 
>>> not
>>>   something beginners should worry about.

>>> 2/ returning a symbolic view (ClassDesc) instead of a Class is *very* error
>>> prone from a user POV, to resolve a ClassDesc to a class, the user as to
>>> provide a Lookup
>>>  and there is a good chance that users will pick the wrong ones. The number 
>>> of
>>>   people that understand classloading and how Lookup works is < 10,
>>>  even experts struggle given the number of time the Lookup API as to be 
>>> patched
>>>   in recent years. Returning a ClassDesc in this context is like asking a 
>>> child
>>>   to read the serial number of a loaded gun.
>>>  Perhaps a way to mitigate that is to provide the code a user should use to 
>>> get
>>>   the equivalent classes in the javadoc of getPermittedSubclasses().

>>> cheers,
>>> Rémi

>>> [1] [ https://bugs.openjdk.java.net/browse/JDK-8244556 |
>>> https://bugs.openjdk.java.net/browse/JDK-8244556 ]

Reply via email to