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

Java lamba表达式是否会自动为其输入参数创建新对象?,java,lambda,java-8,functional-programming,Java,Lambda,Java 8,Functional Programming,我是函数式编程新手,到目前为止我已经了解了如何使用它,匿名函数ecc 我看到了许多代码示例,其中lamba表达式中作为参数所需的对象当时实际上并不存在(它不是IStated) 例如,这是: myClass.myMethod(c -> {my overridden code}); 和这个一样 myClass.myMethod(new String() -> {my overridden code}); 考虑到我的代码中没有声明c,并且myMethod正确地实现了一个函数接口,哪个抽

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

我看到了许多代码示例,其中lamba表达式中作为参数所需的对象当时实际上并不存在(它不是IStated)

例如,这是:

myClass.myMethod(c -> {my overridden code});
和这个一样

myClass.myMethod(new String() -> {my overridden code});
考虑到我的代码中没有声明
c
,并且
myMethod
正确地实现了一个函数接口,哪个抽象方法需要字符串

编辑

我在这个问题上遇到了一些问题: 这部分代码:

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

我不知道c是从哪里来的,它根本没有声明,这就是为什么我想知道lamba表达式是否可以自动创建新对象。

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

是否等效于以下内容

myClass.myMethod(new Consumer<String>(){
    @Override
    public void accept(String c) {
        {my overridden code}
    }
}
myClass.myMethod(新使用者(){
@凌驾
公共无效接受(字符串c){
{我的重写代码}
}
}

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

对不起,我真的不知道你在问什么。这个参数来自于lambda被调用的地方。因此
myMethod
似乎需要一个
消费者
或者一些such;在稍后的某个点上,某个东西将对该
消费者
调用
accept
,并提供一个
String
;这将成为参数。Java中的Lambda表达式是提供相关接口实现的完整Java代码的缩写。箭头左侧的名称只是占位符,不是完整的代码。请注意,lambda表达式是一个定义而不是调用。Re,“我想知道lamba表达式是否可以自动创建新对象。”是的。每次计算lambda时,它都会创建一个匿名内部类的新实例,就像@YassinHajaj在他的回答中所显示的那样。明白了,这就是我所期望的!我在这个问题上遇到了一些问题:这一行:comboBox.setCellFactory(c->new StatusListCell());c从何处获取?它应该是一个ListCell,但没有声明!@MattiaSurricchio您不必担心
c
,因为函数不使用它并返回另一个对象的新实例。它没有声明,因为JavaFX在需要时在后台使用它。您的函数将使用特定的值,但总是返回另一个对象的新实例…嗯,问题的答案是“lamba表达式是否自动创建新对象?”是的,就像您在示例中显示的那样,
new Consumer…
@jameslarge这是标题中的问题,答案是“不,不总是”,但这不是OP在问题正文中提出的问题。我想说,标题需要修改,但是,我不知道如何将OP的实际问题转化为一个短语…按照建议进行编辑
myClass.myMethod(new Consumer<String>(){
    @Override
    public void accept(String c) {
        {my overridden code}
    }
}