2016-02-16 14 views
5

in una conferenza che ho dato alla mia azienda, ho suggerito di convertire qualsiasi lambda complessa in un metodo di riferimento (più leggibile e migliore debug e test) e mi è stato chiesto se è sempre possibile.c'è una funzione lambda che non può essere un riferimento al metodo

Ho cercato e non sono riuscito a trovare un lambda che non può essere sostituito con il metodo di riferimento.

ho ragione? (Lambda può sempre essere sostituita con il riferimento al metodo)

+1

Siamo spiacenti, domanda non ha senso per me. Potresti spiegare con un esempio di codice? – Tunaki

+3

Se lambda sta acquisendo variabili locali, non può essere convertito in un riferimento al metodo. – Misha

+0

la domanda è - in java 8, c'è un tipo di espressione lambda che non può essere refactored come riferimento al metodo? ad es. -personList.forEach (x-> System.out.println (x.getLaptop(). getBrand())) può essere sostituito con personList.forEach (x-> System.out.println (ThisClass :: printLaptopBrabd) –

risposta

10

Il metodo di riferimento non può acquisire variabili. Quindi un lambda di cattura non può essere convertito direttamente in un riferimento al metodo. Ad esempio,

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

In alcuni casi, se viene catturato solo una variabile, potrebbe essere possibile convertire lambda ad un riferimento metodo sulla variabile catturato. Ad esempio,

String greeting = "Hello, "; 

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

possono essere convertiti in metodo di riferimento come

people.replaceAll(greeting::concat); 
Problemi correlati