在查看Java方法引用的一些细节时,我想知道以下代码如何工作:
public class MethodRef {
private static class MyProcessor {
private int value;
MyProcessor(int value) {
this.value = value;
}
void process() {
System.out.println(value);
}
}
public static void main(String[] args) {
Stream.of(1,2,3,4)
.map(MyProcessor::new)
.forEach(MyProcessor::process);
}
}
MyProcessor::new
应该充当使用其提供的one-param构造函数创建MyProcessor
实例的函数。
但是,我想知道为什么MyProcessor::process
可以用作Consumer
,尽管它的实现没有任何参数。
我对此的看法:
.map()
返回MyProcessor
个实例流。由于process
是一种非静态方法,编译器会将.forEach(MyProcessor::process)
转换为.forEach(p -> p.process())
,这应该是有效的Consumer
。