【问题标题】:What is the type of '()->{}' in Java 8?Java 8 中 '()->{}' 的类型是什么?
【发布时间】:2015-05-28 00:25:51
【问题描述】:

在Java8中,下面的lambda是什么类型???

() -> {}

这是一个不带参数也不返回任何内容的函数。

换一种说法:

public class A {
  static void a(){}
  static void main(String[] args) {
    ???? a = A::a
  }
}

问号应该用什么代替?

在 Scala 中,我认为这是 Function0[Unit],但我在 Java 中找不到类似的东西。

【问题讨论】:

    标签: java types lambda functional-programming java-8


    【解决方案1】:

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

    因此,在您的情况下,您需要一个定义不带参数的 void 方法的接口。 Runnable 就是其中的一个例子。

    【讨论】:

    • ...只要该接口准确定义了一个 abstract 方法...
    • @Holger 对,接口现在可以包含非抽象方法。我已经调整了答案。
    • 需要明确的是,interface Foo { void m(); } 也是这个 lambda 的一个完全有效的目标。 Java lambda 本身没有类型,而是具有兼容性。
    【解决方案2】:

    感谢斯图尔特的回答:

    java.lang.Runnable a = () -> {};
    

    既然你这么说了,这似乎很明显......

    【讨论】:

    • 很容易错过,因为它不像其他大多数功能接口一样位于java.util.function 中。
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多