2016-02-16 8 views
5

In einer Vorlesung, die ich bei meiner Firma gab, schlug ich vor, jedes komplexe Lambda in eine Methodenreferenz umzuwandeln (besser lesbar und besser zu debuggen und zu testen) und wurde gefragt, ob es immer möglich ist.gibt es eine Lambda-Funktion, die keine Methodenreferenz sein kann

Ich suchte und konnte kein Lambda finden, das nicht mit Methodenreferenz ersetzt werden kann.

bin ich richtig? (Lambda kann immer durch Methodenreferenz ersetzt werden)

+1

Leider Frage macht keinen Sinn für mich zu Methodenreferenz umgewandelt werden. Kannst du vielleicht mit einem Codebeispiel erklären? – Tunaki

+3

Wenn das Lambda lokale Variablen erfasst, kann es nicht in eine Methodenreferenz konvertiert werden. – Misha

+0

Die Frage ist - in Java 8, gibt es einen Typ von Lambda-Ausdruck, der nicht als Methodenreferenz refaktoriert werden kann? z.B. -personList.forEach (x-> System.out.println (x.getLaptop(). getBrand())) mit personList.forEach ersetzt werden könnte (x-> System.out.println (ThisClass :: printLaptopBrabd) –

Antwort

10

Methodenreferenz kann keine Variablen erfassen. Daher kann ein erfassendes Lambda nicht direkt in eine Methodenreferenz konvertiert werden. Zum Beispiel

int x = 1; 
numbers.replaceAll(n -> n + x); 

In einigen Fällen, wenn nur eine Variable erfaßt wird, könnte es möglich sein, Lambda ein Verfahren Bezug auf der erfassten Variable zu konvertieren. Zum Beispiel

String greeting = "Hello, "; 

people.replaceAll(name -> greeting + name); 

Kann als

people.replaceAll(greeting::concat); 
Verwandte Themen