Ich wurde gefragt, wie dieses LambdaWelche Methodenreferenz könnte dieses Lambda vereinfachen (Foo foo) -> foo.getName()?
(Foo foo) -> foo.getName()
ein besseren Weg, es zu schreiben, zu vereinfachen?
Ich wurde gefragt, wie dieses LambdaWelche Methodenreferenz könnte dieses Lambda vereinfachen (Foo foo) -> foo.getName()?
(Foo foo) -> foo.getName()
ein besseren Weg, es zu schreiben, zu vereinfachen?
Foo::getName
.
Angenommen getName
ist eine Instanzmethode mit einer leeren Parameterliste in seiner Unterschrift, dann ist die Wirkung eine anonyme Methode mit einem Parameter der Klasse Foo
, dass dieser Parameter als „Ziel-Reference“ der Instanz verwendet erstellen Methodenaufruf, dh das Objekt, auf das der Methodenaufruf angewendet wird. Das heißt, es schafft ein Verfahren
return-type anonymousMethod(Foo arg) {
return arg.getName();
}
das ist genau das, was (Foo foo) -> foo.getName();
tut.
Auf der anderen Seite, ist diese Methode Referenz:
abc::getName()
schafft eine anonyme Methode mit ohne Parameter, die abc.getName()
zurückkehrt, wo abc
außerhalb des Lambda definiert ist.
EDIT: Ich habe gerade festgestellt, dass diese Antwort nicht ganz korrekt ist; Es gibt einen Fall, in dem (Foo foo) -> foo.getName()
kann nicht zu Foo::getName
vereinfacht werden. Dies geschieht, wenn Foo
zwei Methoden erklärt, die wie folgt aussehen:
public String getName() { ... }
public static String getName(Foo foo) { ... }
Jetzt Foo::getName
ist nicht eindeutig (und damit illegal), während (Foo foo) -> foo.getName()
nicht.
'Foo :: getName'? – nullpointer
'foo -> foo.getName()' –
Sind beide Antworten richtig? – Arefe