Java方法引用无参数方法作为使用者

时间:2016-11-12 22:23:38

标签: java lambda consumer method-reference

在查看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

0 个答案:

没有答案