gpt4 book ai didi

java - lambda 反序列化 - lambda 表达式是否总是脱糖为 Scala 的静态方法?

转载 作者:行者123 更新时间:2023-12-04 09:08:19 26 4
gpt4 key购买 nike

我注意到,虽然 Java 的实例捕获 lambda 表达式被转换为私有(private)实例方法,但 Scala 的那些被转换为公共(public)静态方法,该方法将包含类作为第一个参数。
基本上,一个脱糖的 lambda 表达式似乎如下所示:

public static final boolean $anonfun$getLambda$1(com.test.SomeClass):
...
Scala lambda 表达式总是这样吗?如果不是,它们将成为实例方法的情况是什么?
另外,为什么 Scala lambda 表达式与 Java lambda 表达式的工作方式不同?

最佳答案

Java也可以创建静态方法;这取决于上下文。
Scala 的 lambda 早于 java,这解释了为什么实现不同:
Scala 可能会尝试复制 java 所做的事情,除非在编写 scala 时,java 还没有它们。
Java 对复制 scala 所做的没有兴趣。此外,Java 的语言设计团队与涉及类文件格式和 JVM 本身的团队直接沟通,因此,任何对性能的担忧都是无关紧要的——如果语言实现创建了 VM 无法很好处理的场景,那么可以说可以在“内部”解决。这意味着 java 将以其他托管在 JVM 上的语言无法做到的方式设计其语言功能。
务实地说,在类级别上,静态方法和私有(private)实例方法几乎没有区别。一个基本上无关紧要的细节(类文件级别的静态方法和实例方法之间的唯一真正区别,一旦您假定静态方法将作为接收器替代的参数作为第一个参数,就是动态的dispatch - 作为一个概念,这不是私有(private)方法参与的事情,因此,没有真正的区别:它们都将“接收者”作为第一个参数)。

关于java - lambda 反序列化 - lambda 表达式是否总是脱糖为 Scala 的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63405221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com