Здравствуйте, ·, Вы писали:
vsb>>Сейчас тоже требует. Просто это называется effectively final. Типа писать не обязательно, но оно подразумевается, менять ты её не можешь. Это ещё одна дурость.
·>Это не дурость, а минимизации wtf/LoC
Дурость, натуральная.
Во-первых никакой необходимости в этом всём вообще нет. Заменяем
int x на
int[] x = new int[1], все обращения к x на
x[0] и готово, у нас с абсолютно тривиальным преобразованием работает изменение переменной из замыкания.
Во-вторых, даже если разработчики Java с чего-то решили, что теперь их миссия — zero overhead abstractions (ха-ха) и превращать под капотом переменную в массив это не ок, то никакой проблемы написать final у нужной переменной нет и это как раз уменьшает WTF/LoC. Т.е. необходимости ввода effectively final концепции не было никакой. Нужна тебе final переменная — ну и напиши final. Это как вводить effectively int концепцию — если не указали у переменной тип, то она будет считаться int-ом. Зачем? Какую проблему решает? Непонятно.
> В шарпе и js с этим налажали и там это классическая грабля.
Это вообще другая проблема и эту проблему так же легко исправить. В Go, кстати, исправили в одной из последних версий.