Scala 2.12和Java 8 SAM互操作不编译

时间:2016-02-08 05:53:05

标签: java scala intellij-idea lambda scala-java-interop

我尝试使用Scala Test中的KeyError来测试Java 8类。根据Scala rx.Observable release notes

  

用于SAM类型的LAMBDA语法(实验)从M3开始,此功能是   默认情况下尚未开启。您可以使用2.12.0-M3启用它   编译器选项。

     

当启用该选项时,则类似于Java 8,Scala 2.12允许   通过传递一个抽象方法,用一个抽象方法实例化任何类型   拉姆达。

但是,使用Gradle和IntelliJ,我无法进行以下编译:

-Xexperimental

的build.gradle

val o: rx.Observable[util.Map.Entry[String, _ <: util.Collection[String]]] = ???
val scheduler = new TestScheduler()
scheduler.createWorker().schedule(_ => o.foreach { }) // The argument is an Action0, which has a SAM void call()

1 个答案:

答案 0 :(得分:4)

scheduler.createWorker().schedule(_ => o.foreach { }) // The argument is an Action0, which has a SAM void call()

那会试图传递一个带有一个参数的“函数”(而不是带有1参数SAM的接口/特征的匿名实例)。 _只表示您不在身体中使用该参数。 Action0的{​​{1}}需要0个参数,因此请尝试使用call()