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?