Draft JLS spec for records
Brian Goetz
brian.goetz at oracle.com
Thu Sep 5 21:26:34 UTC 2019
>
> I don't think so. A compact constructor (or require initializer, as
> you propose) could be not the only constructor. An instance
> initializer is convenient because it's added to every constructor,
> regardless of whether it's compact or not. So the new thing doesn't
> supersede the instance initializer and I see no good reason to
> explicitly disable it.
Vicente offered another reason why we might want to prohibit the
instance initializer, if only out of expediency; it complicates the
analysis of which fields are DA on all paths through the constructor
(and therefore, do not need to be automatically initialized.) If you
have a record:
record Foo(int i) {
{ this.i = 0; }
}
then the canonical constructor has to see that `i` is always initialized
by the static init, and therefore should be not initialized. Worse, if
we have:
record Foo(int i) {
{ if (tuesday) this.i = 0; }
}
then we have to issue a compilation error, since we have fields that are
neither DA nor DU at the end of the initializer.
None of this is impossible to do, of course; it's just not clear whether
it's worth it, given the limited utility of instance initializers in
records (because we've already banned instance fields.)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20190905/0fad2371/attachment.html>
More information about the amber-spec-experts
mailing list