[records] Time to re-read JEP 359
Brian Goetz
brian.goetz at oracle.com
Mon Jan 6 16:15:41 UTC 2020
I mostly agree. For the "record", here's one more possible reason I
left out:
- So you can put Javadoc on the fields.
Again, I don't find this one particularly compelling, but I wanted to
put it in the record.
On 1/6/2020 11:10 AM, Tagir Valeev wrote:
> Hello!
>
> пн, 6 янв. 2020 г., 22:42 Brian Goetz <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>>:
>
> - 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.
>
>
> I'm for not allowing this. I cannot imagine that custom annotation
> could be necessary. I saw many kinds of annotations but I don't think
> there's some scenario when it's necessary to annotate a private field
> of record and it cannot be covered by the corresponding annotation of
> record component or explicit accessor. Many annotations simply don't
> applicable to record fields. E.g. dependency injection like @Inject or
> @Autowired: this should be done via canonical constructor instead of
> reflection. Or Lombok's @Getter (who needs Lombok getters in record?),
> @Setter (field is final, no setter is possible). JPA injections are
> also should be done via the constructor, so record component
> annotation should be better. Static analyzer suppression annotations
> are also unlikely necessary: what could be suppressed for implicitly
> defined fields?
>
> Well, it could be desired for nullability, e.g.:
>
> record ListWrapper<T>(@Nullable List<T> list) {
> public ListWrapper {
> this.list = list == null ? List.of() : list;
> }
>
> public @NotNull List<T> list() { return list; } // IDE might warn
> here that you are returning nullable field from a method marked as
> not-null.
> }
>
> In this particular case, it could be desired to specify an
> explicit @NotNull on the field. However, this could be solved
> defaulting to @NotNull instead:
>
> record ListWrapper<T>(@NotNull List<T> list) {
> public ListWrapper(@Nullable List<T> list) { // need to specify args
> here, but no need to override accessor method
> this.list = list == null ? List.of() : list;
> }
> }
>
> Even though we cannot use a compact constructor anymore, this looks
> clean solution to me.
>
> In any case, we can allow it later if somebody comes up with an
> example where it's really necessary.
>
> With best regards,
> Tagir Valeev.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20200106/ebad25f7/attachment.htm>
More information about the amber-spec-experts
mailing list