以Runnable为例。从Scala中调用它的最简洁方法是什么?
我目前正在这样做:
r { () => runnable-body; null; }
宣布以下特征后:
trait Implicits {
def r(fun: () => Unit) = new Runnable { def run() = fun() }
}
但这有两个缺陷:
仅适用于Runnable,不适用于所有功能接口。
必须有一种更简洁的方式来表达这一点。与Java 8更简单的() -> runnable-body
进行比较。
答案 0 :(得分:4)
您可以让适配器使用() => Any
以避免需要null
。
Scala正致力于支持Java 8 SAM合成,但在2.12之前它不会被标记为稳定;您可以使用-Xexperimental
进行构建,以便在当前版本中启用它。除此之外,据我所知,你需要适用于每个案例的适配器(也许宏可以帮助生成它们)。