java支持当前版本的6个lambda表达式或“匿名函数”吗?有没有我用java支持lambda表达式的编程语言无法做到的东西?我知道java是完整的,所以你可以在其中做“任何事情”。
为什么匿名内部类包装函数不能表示lambda演算中定义的函数?
实际上什么是匿名函数以及如何说某些语言支持匿名函数?
答案 0 :(得分:17)
答案 1 :(得分:0)
C#中的lambda表达式和Java中的匿名内部类之间的一个重要区别是,在Java中,内部类中引用的任何局部变量都由 value 捕获 - 这就是为什么变量必须是最终的。该变量的值在构造时被复制到内部类中。
在C#中,变量可以通过方法中的lambda表达式或其他代码进行更改,这些更改也可以在两个位置看到。
您可以通过将原始变量包装在可变包装中来用Java模拟它 - 例如单个元素数组 - 并使包装器变量最终。虽然这是一个非常糟糕的黑客。
使用匿名内部类IMO的最大问题是纯粹的冗长 - 说明你正在扩展的类,然后是你要覆盖的方法等。
有关闭包的更多信息,特别是在这方面比较Java和C#,请参阅my article on the topic。