Java 8中方法引用的外部参数 [英] External argument to method reference in Java 8
问题描述
我希望将外部参数传递给方法引用:
I am looking to pass an external parameter to a method reference:
String prefix = "The number is :";
numbers.forEach(Main::printWithPrefix);
private static void printWithPrefix(Integer number) {
System.out.println(number);
}
我不知道如何做到这一点。我可以用lambda做到这一点:
I am no idea on how to do it. I am able to do it with a lambda:
String prefix = "The number is :";
numbers.forEach(number -> {
System.out.println(prefix + number);
});
是否可以将外部参数传递给方法参考?
Is it possible to pass an external parameter to a method reference?
推荐答案
不,您不能将参数传递给方法参考。你可以做的是创建一个返回消费者
的方法:
No, you cannot pass a parameter to a method reference. What you can do is create a method which returns a Consumer
:
private static Consumer<Integer> printWithPrefix(String prefix) {
return number -> System.out.println(prefix + number);
}
这可以作为创建消费者的工厂
您可以传递给 numbers.forEach
:
This then works as a factory for creating a Consumer
that you can pass to numbers.forEach
:
String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix));
你甚至可以让它更通用一点,创建一个 printWithPrefix
将 Consumer
作为参数的方法,以便您可以传入不同的方法:
You can even make it a bit more general, creating a printWithPrefix
method that takes a Consumer
as an argument so that you could pass in a different one if you'd want to:
private static Consumer<Integer> printWithPrefix(String prefix,
Consumer<Integer> printer) {
return number -> {
System.out.print(prefix);
printer.accept(number);
};
}
你可以使用它,例如, printNumber
方法:
You could use it, for example, with a printNumber
method:
private static void printNumber(Integer number) {
System.out.println(number);
}
String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix, Main::printNumber));
这篇关于Java 8中方法引用的外部参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!