On 10/24/2020 4:45 PM, Remi Forax wrote:
When we have decided to ban
   this.items = items
in the compact constructor and ask our users to use an assignment instead,
it has a stupid side effect to make the parameters inside the compact 
constructor not effectively final, so a lambda can not capture them.

So a code like this doesn't compile :(
record Matrix(int[][] items) {
     Matrix {
       var copy = new int[items.length];
       Arrays.setAll(copy, i -> items[i].clone());
       items = copy;  // items is not effectively final anymore
     }
   }

But, is this any different than capturing any other constructor parameter that you mutate in the body?

Reply via email to