Frage:
Gibt es in Java bei der Verwendung von Lambda-Ausdrücken eine Möglichkeit? um sie auf Gleichheit zu vergleichen?
Antwort:
Aus Sicht der Spezifikation:
Die Sprachspezifikation garantiert nur die Bewertung Ein Lambda-Ausdruck führt zu einer Instanz einer Klasse, die die Zielfunktionsschnittstelle implementiert. Es gibt jedoch keine Garantien für die Identität oder das Aliasing dieser Instanzen.
Aus Sicht der Implementierung:
Aktuelle Java-Implementierungen stellen eine 1:1-Beziehung zwischen den synthetischen her Klassen, die zum Implementieren von Lambdas und ihren Erfassungsstellen verwendet werden. Wenn dasselbe Lambda am selben Erfassungsort ohne Erfassung von Variablen ausgewertet wird, wird dieselbe Instanz erzeugt und kann mithilfe der Referenzgleichheit (==) verglichen werden.
Bei serialisierbaren Lambdas kann ihr Status leicht abgerufen werden. aber auf Kosten einer geringeren Leistung und Sicherheit.
Herausforderungen bei umfassender Gleichheit:
Es ist im Allgemeinen nicht möglich zu bestimmen, ob zwei Lambdas mit derselben funktionalen Schnittstelle und demselben Verhalten funktionieren sind gleich, weil:
Aktuelle Funktionen und Einschränkungen:
Methodenreferenzen verfügen möglicherweise in Zukunft über anpassbare Gleichheitsdefinitionen, um ihre Verwendung als Listener zu ermöglichen.
Die Java-Expertengruppe erwog, Informationen für selektivere Equals/HashCode- und beschreibende toString-Methoden für Lambdas bereitzustellen. Sie entschieden sich jedoch dagegen, da die Mehrheit der Benutzer möglicherweise Auswirkungen auf die Leistung hatte.
In Bezug auf toString wurde keine endgültige Schlussfolgerung gezogen, aber es wurden Argumente für beide Seiten vorgebracht, so dass die Möglichkeit bestand, dieses Problem erneut zu prüfen in der Zukunft.
Das obige ist der detaillierte Inhalt vonKönnen Lambda-Ausdrücke in Java auf Gleichheit verglichen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!