我首先问过这个关于final
在 Java 中使用 with 匿名内部类的问题:
为什么我们在匿名内部类中使用 final 关键字?
我实际上正在阅读 Martin Odersky 的 Scala 书。看起来 Scala 简化了很多 Java 代码,但是对于 Scala 闭包,我可以注意到一个显着的不同。
虽然在 Java 中我们使用匿名内部类“模拟”闭包,捕获一个最终变量(它将被复制到堆而不是堆栈上),但在 Scala 中我们似乎可以创建一个可以捕获 val 的闭包,但是也是一个 var,因此在闭包调用中更新它!
所以就像我们可以在没有final
关键字的情况下使用 Java 匿名内部类!我还没有读完这本书,但目前我还没有找到关于这种语言设计选择的足够信息。
有人能告诉我为什么 Martin Odersky,他似乎真的很关心函数的副作用,选择闭包来同时捕获val
andvar
而不是只捕获val
?
Java 和 Scala 实现的优缺点是什么?
谢谢