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 amber-dev
mailing list