如何解决Lambda反序列化-Lambda表达式是否总是对Scala的静态方法无效?
我注意到,虽然Java的捕获lambda表达式的实例被转换为私有实例方法,但Scala的实例被转换为以包含类作为第一个参数的公共静态方法。 基本上,经过简化的lambda表达式如下所示:
public static final boolean $anonfun$getLambda$1(com.test.SomeClass):
...
Scala lambda表达式是否总是这种情况?如果没有,在什么情况下它们将成为实例方法?
此外,为什么Scala lambda表达式与Java lambda表达式的工作方式不同?
解决方法
Java还可以创建静态方法。这取决于上下文。
Scala的lambdas早于Java的lambdas,这解释了为什么实现方式不同:
Scala可能会尝试复制Java所做的事情,除了在编写scala时,Java还没有它们。
Java没有兴趣复制scala所做的事情。另外,Java语言设计团队与涉及类文件格式和JVM本身的团队直接通信,因此,与性能有关的任何问题都无关紧要-如果语言实现造成VM不能很好处理的情况,那么可以说可以在“内部”解决。这意味着Java将以其他JVM托管语言无法做到的方式设计其语言功能。
从实用上讲,静态方法和私有实例方法在类级别上的区别很小。基本上无关紧要的细节(在类文件级别上,静态方法和实例方法之间的唯一真正区别是,一旦您确定静态方法将第一个参数作为接收者的替代参数,它就是动态的)派遣-从概念上讲,这不是私有方法所从事的事情,因此,没有真正的区别:它们都将“接收者”作为第一个参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。