Heim  >  Artikel  >  Java  >  Können Lambda-Ausdrücke in Java auf Gleichheit verglichen werden?

Können Lambda-Ausdrücke in Java auf Gleichheit verglichen werden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 04:16:01996Durchsuche

Can Lambda Expressions Be Compared for Equality in Java?

Können Lambda-Funktionen verglichen werden?

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:

  • Nicht serialisierbare Lambdas stellen möglicherweise nicht alle ihre Komponenten zum Vergleich bereit.
  • Getrennt kompilierte Dateien könnten dasselbe Lambda in denselben funktionalen Schnittstellentyp konvertieren, was Vergleiche unpraktisch macht .

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn