<div dir="auto"><div>Hello!<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">вт, 9 авг. 2022 г., 03:10 Andrew Cave <<a href="mailto:ajcave@google.com">ajcave@google.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">What is the motivation for defining fields as private and generating getters in records, as opposed to public fields?<div dir="auto"><br></div><div dir="auto">My reason for preferring public fields: Getters for immutable fields interact poorly with static analysis. e.g. null safety — it is not obvious that the following is null-safe:</div><div dir="auto"><br></div><div dir="auto">if (r.foo() != null) r.foo().bar();</div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">As a developer of IntelliJ IDEA static analyzer, I can assure you that supporting this case for records (when accessors are not overridden) was a pretty trivial improvement and took like a couple of hours to implement and test it. IDEA supports record accessors as well as plain fields. So I wouldn't buy the static analysis argument.</div><div dir="auto"><br></div><div dir="auto">With best regards,</div><div dir="auto">Tagir Valeev</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><br></div><div dir="auto">While the following can be statically deduced as null-safe when foo is a final field:</div><div dir="auto"><br></div><div dir="auto">if (r.foo != null) r.foo.bar();</div><div dir="auto"><br></div><div dir="auto">I’m sure public final fields open more opportunities for compiler optimization as well.</div>
</blockquote></div></div></div>