问题:
在 Java 中,使用 lambda 表达式时,有没有办法比较它们是否相等?
答案:
从规范角度来看:
语言规范仅保证评估lambda 表达式将生成实现目标功能接口的类的实例。但是,它不提供有关这些实例的身份或别名的保证。
从实现角度来看:
当前的 Java 实现在合成之间建立了 1:1 关系用于实现 lambda 及其捕获位点的类。如果在相同的捕获站点评估相同的 lambda,而不捕获任何变量,则会生成相同的实例,并且可以使用引用相等 (==) 进行比较。
对于可序列化的 lambda,可以轻松检索它们的状态,但代价是性能和安全性下降。
全面平等的挑战:
确定两个 lambda 是否具有相同的功能接口和行为函数通常是不可行的相等,因为:
当前功能和限制:
方法引用将来可能具有可自定义的等式定义,以允许它们用作侦听器。
Java 专家组考虑公开信息以提供更具选择性的 equals/hashCode 和 lambda 的描述性 toString 方法。然而,由于对大多数用户的潜在性能影响,他们决定不这样做。
在toString方面,没有得出明确的结论,但双方都有争论,留下了重新讨论这个问题的可能性未来。
以上是Java 中的 Lambda 表达式是否可以比较?的详细内容。更多信息请关注PHP中文网其他相关文章!