什么是最简洁的Scala方式来调用Java 8函数式接口?

3
例如,以Runnable为例。从Scala中调用它的最简洁方式是什么?
我目前正在这样做:
r { () => runnable-body; null; }

在声明了以下特性之后:
trait Implicits {
    def r(fun: () => Unit) = new Runnable { def run() = fun() }
}

但这有两个缺点:

  • 它只适用于Runnable,而不是所有的函数接口。

  • 肯定有一种更简洁的方式来表达这个。与Java 8更简单的() -> runnable-body相比较。


你为什么添加了null? - Nami
在我们的许多可运行体案例中,最后一个表达式不会返回 null。因此,如果没有最终的 null,它将无法编译。但我非常乐意尝试其他写法。即使没有 null 问题,原始问题仍然存在(例如,考虑一个最终表达式返回 void 的可运行体,在这种情况下可以省略 null)。 - Christian D
1个回答

4

你可以让适配器采用 () => Any 来避免使用 null

Scala 正在努力支持 Java 8 SAM 合成,但在 2.12 版本之前不会被标记为稳定;您可以使用 -Xexperimental 进行构建以在当前版本中启用它。除此之外,据我所见,你需要为每种情况都编写适配器(也许宏能帮助生成它们)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接