java - 没有类型的 Lambda 表达式

标签 java lambda java-8

我理解 Java8 lambda 表达式的语法,但为什么下面的代码在没有 x 的特定类型声明的情况下也能工作?为什么要打印“baz”?

public class LambdaExpressions {

    interface Foo {
        void bar(Object o);
    }

    static void doo(Foo f) {
        f.bar("baz");
    }

    public static void main(String[] args) {

        doo( x -> {System.out.println(x);});
    }

}

最佳答案

因为接口(interface)是standard functional interface

It's a functional interface because it contains only one abstract method. This method takes one parameter and returns a [void] value

(针对这个问题改写)

lambda 表达式 x -> { System.out.println(x); } 可以重写为匿名类。

new Foo() {
    @Override
    public void bar(Object x) {
        System.out.println(x);
    }
}

当你调用doo时,你将这个功能接口(interface)作为f传递,然后它会执行f.bar("baz");,所以 "baz"x,它被打印出来了。

所有在一个主要方法中,这看起来像

public static void main(String[] args) {
    Foo f = new Foo() {
        @Override
        public void bar(Object x) {
            System.out.println(x);
        }
    };

    f.bar("baz");
}

关于java - 没有类型的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40117215/

相关文章:

java - 如何在嵌入式 Web 服务器中部署 GWT 应用程序

java - @Autowired 注释不起作用,它返回 NullPointerException 错误。我该如何修复它?

python - 使用 lambda 作为约束函数

python - 在单个 AWS Lambda 中使用两个 python 函数 boto3

java - ListView JavaFX中交替行左侧和右侧的图像和文本

java - 将 Java 8 Lambda 函数转换为 Java 7

Java - 正则表达式问题重叠数据

.net - 缺少 Entity Framework Include(lambda) 扩展

java - Comparator.comparing(...).thenComparing(...) 找出哪些字段不匹配

java - Vaadin 当前显示的对象序列化时出现 NotSerializedException