Java 27 and 26: runnable demos and captured output for every JEP, plus version lanes
Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01B38FGKKam5SCGgwgduVAh3
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user