[records] Time to re-read JEP 359
Brian Goetz
brian.goetz at oracle.com
Mon Jan 6 15:42:51 UTC 2020
On 1/4/2020 10:35 AM, Tagir Valeev wrote:
> Hello!
>
> I was watching a Twitch stream by Nicolai Parlog [1] who explored the
> records feature. Quite expectedly he did this reading JEP 359, rather
> than the spec draft. He noticed at least two inconsistencies:
>
> 1. The record's body may declare static methods, static fields, static
> initializers, constructors, instance methods, instance initializers,
> and nested types.
>
> "intance initializers" part should be removed, to match the spec draft.
Done.
> 2. Any of the members that are automatically derived from the state
> description can also be declared explicitly.
>
> private final fields that match the record components are members and
> derived from the state description, so from this statement, one could
> conclude that explicit field declaration is also possible (which is
> not an unreasonable thing to do: one may want to customize the field
> annotations). If we don't allow such a declaration, this statement
> should be refined (probably changing 'members' to 'methods and
> constructor' or 'members except field' or something like this).
>
This is a fair question; do we want to allow this? There are several
reasons one might want to do so:
- Consistency (though this is generally the reason you give when you
have no other reason), you can do it for the other members;
- Maybe the author wants the fields public;
- Maybe the author wants annnotations on the fields that, were they to
be put on the components, would be spread to places where they are _not_
wanted.
The last of these is the only one that is mildly compelling here, but, I
wonder whether this is purely theoretical, or whether someone actually
needs this.
The reasons against include:
- It is not likely to be something people want to do very often, and
so the return on spec complexity here is probably negative.
More information about the amber-spec-experts
mailing list