2015-01-03 14 views
5

Wir Ausdruck für Getter wie untenLambda Ausdruck für Setter

Function<Student, String> studentNameGetter = Student::getName; 

Wie über das Erstellen von Lambda-Ausdruck für die Setter Lambda können?

Antwort

16

Ich bin nicht sicher, was Sie meinen, indem Sie einen Lambda-Ausdruck für den Setter erstellen.

Es sieht so aus, als ob Sie versuchen, die Methodenreferenz einer geeigneten funktionalen Schnittstelle zuzuweisen. In diesem Fall ist die beste Übereinstimmung zu einem BiConsumer:

BiConsumer<Student, String> studentNameSetter = Student::setName; 
+1

Können Sie erklären, warum dies funktioniert? Ich dachte, ein 'BiConsumer ' kann nur etwas wie '(Student a, String b) -> a.setName (b)' zugewiesen werden. Aber die Signatur von 'setName' hat nur einen Parameter. – T3rm1

+0

@ T3rm1 es funktioniert, weil 'Student a' ist ein Parameter &' setName' hat einen Parameter. Der Konsument nimmt also sowohl das Zielobjekt als auch den Setter-Parameter als Parameter. – Mukund