Java与Scala功能接口的使用

时间:2017-04-27 17:38:19

标签: 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

1 个答案:

答案 0 :(得分:13)

Scala 2.12版支持将lambda表达式转换为具有“单一抽象方法”(SAM)的类型,即“Functional Interface”,就像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中完全正常。