Scala 是否有任何语法糖来替换以下代码:
val thread = new Thread(new Runnable {
def run() {
println("hello world")
}
})
更像是:
val thread = new Thread(() => println("hello world"))
在特征/接口(interface)只需要实现一种方法的情况下?如果没有,将来是否有机会在 Scala 中拥有此功能?它在处理 Java 类时特别有用。
我发现三年前问过一个类似的问题:Generically implementing a Java Single-Abstract-Method interface with a Scala closure?答案说我们应该在 Scala 2.10 中拥有该功能。我一直在寻找 Single Abstract Method 关键字,但我没有找到任何东西。该功能发生了什么?
最佳答案
斯卡拉有 实验 支持从 2.11 开始的 SAM,标记为 -Xexperimental
:
Welcome to Scala version 2.11.0-RC3 (OpenJDK 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :set -Xexperimental
scala> val r: Runnable = () => println("hello world")
r: Runnable = $anonfun$1@7861ff33
scala> new Thread(r).run
hello world
编辑 :从 2.11.5 开始,这也可以内联完成:
scala> new Thread(() => println("hello world")).run
hello world
预期类型的通常限制也适用:
根据original commit根据 Adriaan 的说法,其中一些限制可能会在 future 取消,尤其是最后两个。
关于Scala单方法接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820352/