RFR: JDK-8289106: Add model of class file versions to core reflection [v5]

Joe Darcy darcy at openjdk.org
Mon Aug 1 23:12:11 UTC 2022


On Mon, 1 Aug 2022 17:37:36 GMT, ExE Boss <duke at openjdk.org> wrote:

>> src/java.base/share/classes/java/lang/reflect/AccessFlag.java line 101:
>> 
>>> 99:     PUBLIC(Modifier.PUBLIC, true,
>>> 100:            Set.of(Location.CLASS, Location.FIELD, Location.METHOD,
>>> 101:                   Location.INNER_CLASS)) {
>> 
>> Is there another way to implement this that does not create 19 anonymous classes with a single overloaded method?
>
> Probably by creating and using shared instances of `java.util.Function` which would also allow deduplicating the code.

> Is there another way to implement this that does not create 19 anonymous classes with a single overloaded method?

Overriding a method in an enum constant specific class is one way to implement constant-specific behavior. Textually, I thought it had the advantage of having the class file version specific behavior close to the latest version behavior.

This could be refactored in various ways, such as having AccessFlag.locations(ClassFileFormatVersion cffv) start with a switch over the location which implemented the enum constant specific behavior. Or the set of parameters of the enum constructor could be augmented to cover more cases (empty until $VERSION, then $LOCATIONS, etc.), with constant-specific overrides just constants with unique patterns like STRICT.

-------------

PR: https://git.openjdk.org/jdk/pull/9299


More information about the core-libs-dev mailing list