代码之家  ›  专栏  ›  技术社区  ›  Mattia Surricchio

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

  •  1
  • Mattia Surricchio  · 技术社区  · 6 年前

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

    我在lamba表达式中看到了许多需要作为参数的对象在那一刻实际上不存在的代码示例(它没有被指定)。

    例如,这是不是:

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

    跟这个一样

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

    考虑到 c 在我的代码中没有声明 myMethod 正确实现函数接口哪个抽象方法需要字符串?

    编辑 :

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

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

    我想不出C是从哪里来的,根本没有声明,这就是为什么我想知道LAMBA表达式是否能够自动创建新的对象。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Yassin Hajaj    6 年前

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

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

    相当于

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

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