Java vs 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表达式转换为类型,就像Java 8一样。请参阅http://www.scala-lang.org/news/2.12.0#lambda-syntax-for-sam-types。

早期的Scala版本无法自动将lambda表达式转换为Java功能接口/SAM类型(例如Runnable(。您最有可能在2.12之前使用版本。

您提供的代码在Scala 2.12中的工作正常。

最新更新