2017-10-24 64 views
6

mogę stworzyć prosty Runnable użyciu lambda, jak:Runnable i lambda

Runnable runnable =()->{ 
    String message = "This is an hard coded string"; 
    System.out.println(message); 
}; 

ograniczenie z powyższym kodzie to, że stworzył Runnable z domyślnego konstruktora (bez argumentów).

W praktyce Runnable często podejmują informacji podczas jej tworzenia, jak następuje:

class MyRunnable implements Runnable { 
    private final String message; 

    public MyRunnable(String message) { 
     this.message = message; 
    } 

    @Override 
    public void run() { 
     System.out.println(message); 
    } 
} 

chciałbym zapytać, jak tworzyć lambda dla Runnable, które mogłyby podjąć argumenty konstruktora.

+2

Czy to ma być 'Runnable'? Możesz użyć 'Consumer '. – Eran

+0

jaka jest różnica między tymi dwoma fragmentami kodu, robią one to samo, możesz nawet zrobić wiadomość końcową w pierwszym fragmencie kodu: – luk2302

+0

@eran, w moim przypadku użyłbym Runnable w wątku lub Executorze, wygląda na to, że Konsument nie robi ". t działa w moim przypadku. – Tom

Odpowiedz

4

Nie ma problemu z posiadaniem parametrów spoza

private void runableWithParameter(final String message) { 
    final Runnable runnable =()->{ 
     System.out.println(message); 
    }; 
}