2017-02-03 5 views

Antwort

2

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.

Verwandte Themen