Trust final fields in records

Mandy Chung mandy.chung at oracle.com
Fri Jun 12 16:53:51 UTC 2020


No change on setAccessible that will succeed on any fields as it is today.

The proposed change is that final fields of a record are not modifiable 
(i.e. no reflective write access) and  Field::set on a Field object with 
no reflective write access will throw IllegalAccessException.

Today Field::set behavior:
- Static final fields have no write access
- Non-static final fields in a hidden class have no write access
- Non-static final fields on normal classes (that are not records) have 
reflective write access

No change to the above.

Mandy
[1] 
https://download.java.net/java/early_access/jdk15/docs/api/java.base/java/lang/reflect/Field.html#set(java.lang.Object,java.lang.Object)

On 6/12/20 4:35 AM, Johannes Kuhn wrote:
> Jackson will break. It loves to call setAccessible on everything - 
> even when explicitly disabled [1].
>
> The other thing to consider is if setAccessible should fail, or if it 
> should still allow read access, similar to static final fields.
>
> - Johannes
>
> [1]: https://github.com/FasterXML/jackson-databind/issues/2760
>
> On 12-Jun-20 12:57, Brian Goetz wrote:
>> If the fields cannot be made accessible, this means that 3rd party 
>> serialization frameworks will choke on records, right?
>>
>> Sent from my iPad
>>
>>> On Jun 12, 2020, at 5:10 AM, Chris Hegarty 
>>> <chris.hegarty at oracle.com> wrote:
>>>
>>> 
>>>
>>>> On 12 Jun 2020, at 02:52, Mandy Chung <mandy.chung at oracle.com> wrote:
>>>>
>>>> Hi Christoph,
>>>>
>>>> I can sponsor your patch.  I create 
>>>> https://bugs.openjdk.java.net/browse/JDK-8247444.
>>> This is great. I remember thinking (saying?) similar when we settled 
>>> on record serialization not needing to muck around with field 
>>> stuffing (among the motivating factors for how records deserialize). 
>>> This is a great step forward, nice to see it progressing.
>>>
>>> -Chris.
>
>



More information about the hotspot-runtime-dev mailing list