什么是最简洁的Scala调用Java 8功能接口的方式?

时间:2015-01-25 03:25:27

标签: java scala functional-programming

以Runnable为例。从Scala中调用它的最简洁方法是什么?

我目前正在这样做:

r { () => runnable-body; null; }

宣布以下特征后:

trait Implicits {
    def r(fun: () => Unit) = new Runnable { def run() = fun() }
}

但这有两个缺陷:

  • 仅适用于Runnable,不适用于所有功能接口。

  • 必须有一种更简洁的方式来表达这一点。与Java 8更简单的() -> runnable-body进行比较。

1 个答案:

答案 0 :(得分:4)

您可以让适配器使用() => Any以避免需要null

Scala正致力于支持Java 8 SAM合成,但在2.12之前它不会被标记为稳定;您可以使用-Xexperimental进行构建,以便在当前版本中启用它。除此之外,据我所知,你需要适用于每个案例的适配器(也许宏可以帮助生成它们)。