Java 与 Scala 功能接口(interface)用法

标签 java scala

在 Java 中我可以这样做:

Runnable task = () -> { System.out.println("Task is running"); };

但是为什么在 Scala 中我不能做同样的事情!

val task: Runnable = () => {println("Task is running")}

我收到一个编译器错误!我使用的是 Scala 版本 2.11.8。

type mismatch;  found   : () => Unit  required: Runnable

最佳答案

Scala 2.12 版支持使用“单一抽象方法”(SAM) 将 lambda 表达式转换为类型,又名“Functional Interface”,就像 Java 8 一样。参见 http://www.scala-lang.org/news/2.12.0#lambda-syntax-for-sam-types .

早期的 Scala 版本无法自动将 lambda 表达式转换为 Java 函数接口(interface)/SAM 类型(例如 Runnable)。您很可能使用的是 2.12 之前的版本。

您提供的代码在 Scala 2.12 中运行良好。

关于Java 与 Scala 功能接口(interface)用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664511/

相关文章:

scala - 关于 Spark 的 rdd.map(_.swap)

xml - 如何在 Scala 中创建没有文字元素名称的 XML 根节点?

java - JScrollPane 未显示在 JTable 上

java - 重量转换程序出现问题

scala - 为什么人们定义对象扩展其伴生类?

scala - 如何让虚拟时间在猫效应 3 的测试中通过?

scala - scala 编译器对类型系统内的单元类型有什么特殊的规则

java - Java 中有错误处理 API/框架吗?

java - 将标准输出字节从 Process 转发到 WebSocket 或读取当前 InputStream 长度

java - Checkstyle "Expected @param tag for ' id'"错误