我是函数式编程的新手,到目前为止我已经理解了如何使用它,匿名函数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表达式是否可以自动创建新对象。
答案 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代表一个方法,一个函数,但它本身不是一个可执行的部分,它必须用外部参数调用。