2016-08-01 20 views
3

Ich suche einen externen Parameter auf ein Verfahren Referenz zu übergeben:Externes Argument Methode Referenz in Java 8

String prefix = "The number is :"; 
numbers.forEach(Main::printWithPrefix); 

private static void printWithPrefix(Integer number) { 
    System.out.println(number); 
} 

Ich bin keine Ahnung, wie es zu tun. Ich bin in der Lage, es mit einem Lambda zu tun:

String prefix = "The number is :"; 
numbers.forEach(number -> { 
    System.out.println(prefix + number); 
}); 

Ist es möglich, einen externen Parameter zu einer Methodenreferenz zu übergeben?

Antwort

7

Nein, Sie können einen Parameter nicht an eine Methodenreferenz übergeben. Was können Sie tun, ist es, eine Methode erstellen, die eine Consumer zurückgibt:

private static Consumer<Integer> printWithPrefix(String prefix) { 
    return number -> System.out.println(prefix + number); 
} 

Diese arbeitet dann als Fabrik eine Consumer für die Erstellung, die Sie numbers.forEach passieren kann:

String prefix = "The number is :"; 
numbers.forEach(printWithPrefix(prefix)); 

Sie können sogar machen es zu einem Bit allgemeinere, die Schaffung eines printWithPrefix Methode, die eine Consumer als Argument, so dass Sie in einem anderen passieren könnte, wenn Sie würde wollen:

private static Consumer<Integer> printWithPrefix(String prefix, 
               Consumer<Integer> printer) { 
    return number -> { 
     System.out.print(prefix); 
     printer.accept(number); 
    }; 
} 

Sie könnten es zum Beispiel mit einer printNumber Methode verwenden,:

private static void printNumber(Integer number) { 
    System.out.println(number); 
} 

String prefix = "The number is :"; 
numbers.forEach(printWithPrefix(prefix, Main::printNumber));