Files
javademos/docs/output/70-final-field-mutation.txt

46 lines
2.3 KiB
Plaintext

# JEP 500: reflection writing to a final field, same class file behaviour on 25 and on 26
=== JDK 25 (class compiled --release 25)
field reads : 9090
port() returns : 8080
=== JDK 26, defaults
WARNING: Final field port in class FinalFieldMutation$Config has been mutated reflectively by class FinalFieldMutation in unnamed module @<hash> (file:<repo>/build/recap26/26/)
WARNING: Use --enable-final-field-mutation=ALL-UNNAMED to avoid a warning
WARNING: Mutating final fields will be blocked in a future release unless final field mutation is enabled
field reads : 9090
port() returns : 8080
=== JDK 26, --enable-final-field-mutation=ALL-UNNAMED (the opt-in the warning asks for)
field reads : 9090
port() returns : 8080
=== JDK 26, --illegal-final-field-mutation=deny (what a future default will look like)
setInt refused : class FinalFieldMutation (in unnamed module @<hash>) cannot set final field FinalFieldMutation$Config.port (in unnamed module @<hash>), unnamed module @<hash> is not allowed to mutate final fields
=== JDK 26, --illegal-final-field-mutation=debug (warning plus the offending stack trace)
Final field port in class FinalFieldMutation$Config has been mutated reflectively by class FinalFieldMutation in unnamed module @<hash> (file:<repo>/build/recap26/26/)
at java.base/java.lang.reflect.Field.postSetFinal(Field.java:1534)
at java.base/java.lang.reflect.Field.setFinal(Field.java:1449)
at java.base/java.lang.reflect.Field.setInt(Field.java:1134)
at FinalFieldMutation.main(FinalFieldMutation.java:22)
field reads : 9090
port() returns : 8080
=== JDK 26, JFR default settings, [no flag]: jfr print --events jdk.FinalFieldMutation
jdk.FinalFieldMutation
declaringClass = FinalFieldMutation$Config (classLoader = app)
fieldName = "port"
FinalFieldMutation.main(String[]) line: 22
events recorded: 1
=== JDK 26, JFR default settings, [--enable-final-field-mutation=ALL-UNNAMED]: jfr print --events jdk.FinalFieldMutation
jdk.FinalFieldMutation
declaringClass = FinalFieldMutation$Config (classLoader = app)
fieldName = "port"
FinalFieldMutation.main(String[]) line: 22
events recorded: 1
=== JDK 26, JFR default settings, [--illegal-final-field-mutation=deny]: jfr print --events jdk.FinalFieldMutation
events recorded: 0