2016-02-16 19 views
5

w wykładzie, który podałem w mojej firmie, zasugerowałem, aby przekształcić dowolną złożoną lambdę na odwołanie do metody (bardziej czytelne i lepsze debugowanie i testowanie) i zapytano, czy jest to zawsze możliwe.jest funkcja lambda, która nie może być odwołaniem do metody

Szukałem i nie mogłem znaleźć lambda, którego nie można zastąpić odniesieniem do metody.

Mam rację? (Wartość lambda zawsze można zastąpić odniesieniem do metody)

+1

Niestety, pytanie nie ma sensu dla mnie. Czy mógłbyś wytłumaczyć, może próbką kodu? – Tunaki

+3

Jeśli lambda przechwytuje zmienne lokalne, nie można jej przekonwertować na odwołanie do metody. – Misha

+0

pytanie brzmi - w języku Java 8, czy istnieje typ wyrażenia lambda, który nie może być refaktoryzowany jako odniesienie do metody? np. -personList.forEach (x-> System.out.println (x.getLaptop(). getBrand())) można zastąpić przez personList.forEach (x-> System.out.println (ThisClass :: printLaptopBrabd) –

Odpowiedz

10

Odniesienie do metody nie może uchwycić zmiennych. Tak więc przechwytywania lambda nie można bezpośrednio przekonwertować na odwołanie do metody. Na przykład,

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

W niektórych przypadkach, jeśli tylko jedna zmienna jest zrobione, to może być możliwe, aby przekształcić lambda do odniesienia metody na zmiennej niewoli. Na przykład,

String greeting = "Hello, "; 

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

może być przekształcony w odniesieniu metoda jak

people.replaceAll(greeting::concat); 
Powiązane problemy