Heim  >  Artikel  >  Java  >  Warum können Methodenreferenzen mit Rückgabetypen die Consumer-Schnittstelle in Java implementieren?

Warum können Methodenreferenzen mit Rückgabetypen die Consumer-Schnittstelle in Java implementieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-22 10:25:12210Durchsuche

Why Can Method References with Return Types Implement the Consumer Interface in Java?

Warum Methodenreferenzen mit Rückgabetypen zur Verbraucherschnittstelle passen

In Java können Methodenreferenzen zum Erstellen funktionaler Schnittstellen verwendet werden. Die Consumer-Schnittstelle beispielsweise nimmt ein einzelnes Argument und führt darauf eine Aktion aus. Überraschenderweise können Methodenreferenzen mit Rückgabetypen auch mit der Consumer-Schnittstelle übereinstimmen.

Die Entscheidung, dieses Verhalten zuzulassen, basierte auf der Idee, Methoden auf funktionale Schnittstellen anzupassen, ähnlich wie sie aufgerufen werden. Insbesondere kann jede Methode, die einen Wert zurückgibt, an eine Consumer-Schnittstelle angepasst werden, auch wenn der Rückgabewert ignoriert wird.

Bezüglich Lambda-Ausdrücken gibt es zwei Formen: (args) -> Ausdruck und (Argumente) -> { Aussagen* }. Die letztere Form kann void-kompatibel sein, wenn kein Codepfad versucht, einen Wert zurückzugeben. Die erstere Form ist wertkompatibel, wenn der Ausdruck einen Wert ergibt. Wenn der Ausdruck jedoch auch eine Anweisung ist (z. B. ein Methodenaufruf oder ein Inkrementierungs-/Dekrementierungsoperator), kann er void-kompatibel sein.

Zum Beispiel ist der Ausdruck s -> s ist wertkompatibel, während s -> i ist leerkompatibel. Dies liegt daran, dass Inkrementierungs-/Dekrementierungsoperatoren als eigenständige Anweisungen verwendet werden können. Ein weiterer mit Leerzeichen kompatibler Ausdruck ist s -> new Whatever(s), da Ausdrücke zur Erstellung von Klasseninstanzen auch als Anweisungen verwendet werden können.

Interessanterweise (arg) -> methodReturningVoid(arg) ist die einzige Ausdrucksform, die nicht wertkompatibel ist.

Das obige ist der detaillierte Inhalt vonWarum können Methodenreferenzen mit Rückgabetypen die Consumer-Schnittstelle in Java implementieren?. 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