Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是';()->;{}';在Java8中?_Java_Types_Lambda_Functional Programming_Java 8 - Fatal编程技术网

什么是';()->;{}';在Java8中?

什么是';()->;{}';在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 = ()

在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 = () -> {};

既然您已经说明了这一点,它似乎非常明显……

与Scala不同,Java中的lambdas没有固定的类型。相反,只要该接口定义了一个抽象方法,并且该方法与lambda具有相同的签名,它们就采用声明变量的接口类型


因此,在您的例子中,您需要一个接口来定义一个不带参数的void方法<代码>可运行就是一个例子。

…只要该接口定义了一个抽象方法…@Holger Right,现在接口可以包含非抽象方法。我已经调整了我的答案。更清楚的是,
接口Foo{void m();}
也是这个lambda的一个非常有效的目标。Java lambda本身没有类型,而是具有兼容性。很容易错过,因为它不在
Java.util.function
中,不像其他大多数函数接口那样。