【问题标题】:How does the arrow operator work internally in java 8? [duplicate]箭头运算符如何在 java 8 内部工作? [复制]
【发布时间】:2014-09-17 19:31:51
【问题描述】:

我知道箭头的左侧是参数,箭头的右侧是参数所在的函数。但是,我想知道 java 8 如何映射左侧和右侧并转换为函数。那里会发生什么,我在哪里可以找到这些信息?

【问题讨论】:

标签: java java-8


【解决方案1】:

当你有一个-> 时,javac 编译器会添加一个包含代码内容的静态方法。它还向类添加动态调用端信息,以便 JVM 可以将 lambda 实现的接口映射到参数和返回类型。 JVM在运行时生成代码,将接口绑定到生成的方法上。

与 lambdas 和匿名类的不同之处在于隐式变量只需要有效地是最终的(因为可能已经成为最终的)并且成员变量被复制,即它不保留对外部的 this 的引用类。

它可以区分RunnableCallable<void>,即使两者都没有参数。更多详情http://vanillajava.blogspot.com/2014/09/lambdas-and-side-effects.html

【讨论】:

  • 那里的文章很棒!
  • @LuiggiMendoza 欢呼。 :)
  • 由匿名内部类捕获的局部变量只需要有效地为最终的,而不是显式声明为最终的。这与 lambdas 类似,是 Java 8 对以前版本的一种放松。 Lambdas 也将捕获封闭的实例,但前提是需要捕获它。不过你是对的,非捕获 lambdas 不会捕获封闭的实例,而 AIC 会,即使它可能是不必要的。
  • 据我所知,lambda 实现方法不需要为static。例如。捕获这一点的 lambdas 可以使用实例方法来实现,但是,当前的编译器不会利用这个机会。
猜你喜欢
  • 2012-05-27
  • 2020-12-16
  • 2014-01-17
  • 1970-01-01
  • 2021-02-07
  • 2012-06-10
  • 1970-01-01
  • 2020-06-21
  • 2015-12-28
相关资源
最近更新 更多