我理解 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/