lamba表达式是否自动为其输入参数创建新对象?

时间:2018-06-10 22:07:23

标签: java lambda java-8 functional-programming

我是函数式编程的新手,到目前为止我已经理解了如何使用它,匿名函数ecc ......

我看到很多代码示例,其中我的lamba表达式中作为参数所需的对象在那一刻实际上不存在(它没有被证实)。

例如,是这样的:

myClass.myMethod(c -> {my overridden code});

与此相同

myClass.myMethod(new String() -> {my overridden code});

考虑到c未在我的代码中声明,myMethod正确实现了一个抽象方法需要String的函数接口?

修改

我对这个问题有些疑问: JavaFX ComboBox Image 这部分代码:

comboBox.setCellFactory(c -> new StatusListCell());

我无法弄清楚c取自哪里,它根本没有声明,这就是为什么我想知道lamba表达式是否可以自动创建新对象。

1 个答案:

答案 0 :(得分:2)

c实际上只是一个占位符,就像方法中的参数一样(这与lambda的功能没有区别)。

myClass.myMethod(c -> {my overridden code});

相当于以下

myClass.myMethod(new Consumer<String>(){
    @Override
    public void accept(String c) {
        {my overridden code}
    }
}

所以你的问题的答案是:不。lambda代表一个方法,一个函数,但它本身不是一个可执行的部分,它必须用外部参数调用。