【发布时间】:2014-09-17 19:31:51
【问题描述】:
我知道箭头的左侧是参数,箭头的右侧是参数所在的函数。但是,我想知道 java 8 如何映射左侧和右侧并转换为函数。那里会发生什么,我在哪里可以找到这些信息?
【问题讨论】:
我知道箭头的左侧是参数,箭头的右侧是参数所在的函数。但是,我想知道 java 8 如何映射左侧和右侧并转换为函数。那里会发生什么,我在哪里可以找到这些信息?
【问题讨论】:
当你有一个-> 时,javac 编译器会添加一个包含代码内容的静态方法。它还向类添加动态调用端信息,以便 JVM 可以将 lambda 实现的接口映射到参数和返回类型。 JVM在运行时生成代码,将接口绑定到生成的方法上。
与 lambdas 和匿名类的不同之处在于隐式变量只需要有效地是最终的(因为可能已经成为最终的)并且成员变量被复制,即它不保留对外部的 this 的引用类。
它可以区分Runnable 和Callable<void>,即使两者都没有参数。更多详情http://vanillajava.blogspot.com/2014/09/lambdas-and-side-effects.html
【讨论】:
static。例如。捕获这一点的 lambdas 可以使用实例方法来实现,但是,当前的编译器不会利用这个机会。