首页  >  文章  >  Java  >  Java 中的 Lambda 表达式是否可以比较?

Java 中的 Lambda 表达式是否可以比较?

Linda Hamilton
Linda Hamilton原创
2024-10-31 04:16:01903浏览

Can Lambda Expressions Be Compared for Equality in Java?

Lambda 函数可以比较吗?

问题:

在 Java 中,使用 lambda 表达式时,有没有办法比较它们是否相等?

答案:

从规范角度来看:

语言规范仅保证评估lambda 表达式将生成实现目标功能接口的类的实例。但是,它不提供有关这些实例的身份或别名的保证。

从实现角度来看:

当前的 Java 实现在合成之间建立了 1:1 关系用于实现 lambda 及其捕获位点的类。如果在相同的捕获站点评估相同的 lambda,而不捕获任何变量,则会生成相同的实例,并且可以使用引用相等 (==) 进行比较。

对于可序列化的 lambda,可以轻松检索它们的状态,但代价是性能和安全性下降。

全面平等的挑战:

确定两个 lambda 是否具有相同的功能接口和行为函数通常是不可行的相等,因为:

  • 不可序列化的 lambda 可能不会公开其所有组件进行比较。
  • 单独编译的文件可能会将相同的 lambda 转换为相同的函数接口类型,从而导致比较不切实际.

当前功能和限制:

方法引用将来可能具有可自定义的等式定义,以允许它们用作侦听器。

Java 专家组考虑公开信息以提供更具选择性的 equals/hashCode 和 lambda 的描述性 toString 方法。然而,由于对大多数用户的潜在性能影响,他们决定不这样做。

在toString方面,没有得出明确的结论,但双方都有争论,留下了重新讨论这个问题的可能性未来。

以上是Java 中的 Lambda 表达式是否可以比较?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn