Comparing Lambdas: Implementation and Interpretation
The Problem:
Given a list of objects defined using lambda expressions, is it possible to inspect and compare them for equality?
Implementation Considerations:
From an implementation perspective, non-capturing lambdas evaluated at the same capture site produce the same instance, which can be compared using reference equality. However, distinct lambda expressions captured at different sites may map to different synthetic classes.
Specification Implications:
The language specification guarantees only that the result of evaluating a lambda expression is an instance of the target functional interface. It does not specify the identity or aliasing of the result. This flexibility allows implementations to optimize performance by not creating unique instances for each lambda evaluation.
Method Reference Equality:
Method references may provide a practical scenario for tweaking the definition of equality to support use as listeners. This is under consideration for future revisions.
In-depth Assessment:
Determining equality of two lambdas requires comparing their behavior function, captured arguments, and the functional interface they are converted to. However, obtaining this information for non-serializable lambdas can be challenging.
Design Decisions:
The Java Expert Group concluded that exposing information for lambda equality comparisons is not worth the performance penalty for the majority of users. However, the feasibility of improving toString() representations remains open for future discussion.
The above is the detailed content of Can Lambdas Be Compared for Equality in Java?. For more information, please follow other related articles on the PHP Chinese website!