История изменений
Исправление KivApple, (текущая версия) :
В замыкание можно передать только final (т. е. неизменяемую) переменную. А хочется всё же её изменить. В итоге передаётся массив из одного элемента и меняется его содержимое. Ссылка на сам массив при этом ведь не изменяется.
Это фактически костыль, который возникает в языках с управляемой памятью и отсутствием полноценных указателей.
C++:
int a;
int *b = &a;
...
*b = 10;
Java:
int[] b = new int[] { 0 };
...
b[0] = 10;
Очевидно, это актуально, когда хочется передать переменную в функцию таким образом, чтобы её изменение было видно из-вне.
Исправление KivApple, :
В замыкание можно передать только final (т. е. неизменяемую) переменную. А хочется всё же её изменить. В итоге передаётся массив из одного элемента и меняется его содержимое. Ссылка на сам массив при этом ведь не изменяется.
Это фактически костыль, который возникает в языках с управляемой памятью и отсутствием полноценных указателей.
C++:
int a;
int *b = a;
...
*b = 10;
Java:
int[] b = new int[] { 0 };
...
b[0] = 10;
Очевидно, это актуально, когда хочется передать переменную в функцию таким образом, чтобы её изменение было видно из-вне.
Исходная версия KivApple, :
В замыкание можно передать только final (т. е. неизменяемую) переменную. А хочется всё же её изменить. В итоге передаётся массив из одного элемента и меняется его содержимое. Ссылка на сам массив при этом ведь не изменяется.
Это фактически костыль, который возникает в языках с управляемой памятью и отсутствием полноценных указателей.
C++:
int a;
int *b = a;
...
*b = 10;
Java:
int[] b = new int[] { 0 };
...
b[0] = 10;
Очевидно, это актуально, когда хочется передать переменную в функцию и таким образом, чтобы изменение было видно из-вне.