在 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/