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 <fo...@univ-mlv.fr> 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

Reply via email to