Bad iteraction between the compact constructor and parameters captured by a lambda
Brian Goetz
brian.goetz at oracle.com
Sat Oct 24 21:47:42 UTC 2020
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?
More information about the amber-spec-experts
mailing list