On Apr 24, 2020, at 11:24 AM, Brian Goetz <brian.go...@oracle.com> wrote: > > the question I want to ask is: should we simply _ban_ reads and writes to > `this.x` in the body of a compact constructor, and let the auto mechanism > take care of it, so there is no confusion about mixing initialization modes, > the correct idiom, or reading possibly uninitialized fields
If we can get away with it, yes^100. Assigning to a final field is one of the darkest corners of the language. In Java 1.1 we had to create a jungle of DA/DU rules for those assignments. It would be great if they just went away, for compact constructors. When reading the first 1/2 of your message, I was partly afraid the ask was going to be, “drop the auto-initialize feature” on the grounds of user confusion. One of our hardest problems historically is to reduce the user confusion, and *still* have our nice things. I also like Guy’s doubling down on the solution which forbids `this` in the body of the constructor. Any of these restrictions can be lifted in a future version of the language, so it’s relatively safe to make them now. — John