Закрытия Scala по сравнению с внутренними классами Java -> final VS var

Я впервые задал этот вопрос об использованииfinal с анонимными внутренними классами в Java:Почему мы используем ключевое слово final с анонимными внутренними классами?

Я на самом деле читаю книгу Скалы Мартина Одерского. Кажется, Scala значительно упрощает Java-код, но для замыканий Scala я мог заметить существенную разницу.

В то время как в Java мы «имитируем» замыкания с помощью анонимного внутреннего класса, захватывая конечную переменную (которая будет скопирована для хранения в куче, а не в стеке), в Scala мы можем создать замыкание, которое может захватывать val, но также var, и, таким образом, обновите его в вызове замыкания!

Так что мы можем использовать анонимный внутренний класс Java безfinal ключевое слово! Я еще не дочитал книгу, но пока не нашел достаточно информации об этом выборе языка.

Может кто-нибудь сказать мне, почему Мартин Одерски, который, кажется, действительно заботится о побочных эффектах функции, выбирает замыкания, чтобы иметь возможность захватитьval а такжеvar, а не толькоval?

Каковы преимущества и недостатки реализаций Java и Scala?

Спасибо

Связанный вопрос:В случае закрытий Scala когда захваченные переменные начинают жить в куче JVM?

Ответы на вопрос(2)

Ваш ответ на вопрос