什么是';()->;{}';在Java8中?
在Java8中,以下lambda的类型是什么什么是';()->;{}';在Java8中?,java,types,lambda,functional-programming,java-8,Java,Types,Lambda,Functional Programming,Java 8,在Java8中,以下lambda的类型是什么 () -> {} 这是一个不带参数也不返回任何内容的函数 换言之: public class A { static void a(){} static void main(String[] args) { ???? a = A::a } } 我应该用什么来代替问号 在Scala中,这应该是一个函数0[Unit],但我在Java中找不到类似的函数。感谢Stuart的回答: java.lang.Runnable a = ()
() -> {}
这是一个不带参数也不返回任何内容的函数
换言之:
public class A {
static void a(){}
static void main(String[] args) {
???? a = A::a
}
}
我应该用什么来代替问号
在Scala中,这应该是一个
函数0[Unit]
,但我在Java中找不到类似的函数。感谢Stuart的回答:
java.lang.Runnable a = () -> {};
既然您已经说明了这一点,它似乎非常明显……与Scala不同,Java中的lambdas没有固定的类型。相反,只要该接口定义了一个抽象方法,并且该方法与lambda具有相同的签名,它们就采用声明变量的接口类型
因此,在您的例子中,您需要一个接口来定义一个不带参数的void方法<代码>可运行就是一个例子。…只要该接口定义了一个抽象方法…@Holger Right,现在接口可以包含非抽象方法。我已经调整了我的答案。更清楚的是,
接口Foo{void m();}
也是这个lambda的一个非常有效的目标。Java lambda本身没有类型,而是具有兼容性。很容易错过,因为它不在Java.util.function
中,不像其他大多数函数接口那样。