4
我想要測試一個Java 8類使用斯卡拉測試rx.Observable
。按照斯卡拉2.12.0-M3
release notes:斯卡拉2.12和Java 8 SAM互操作不編譯
LAMBDA語法SAM類型(實驗)作爲M3的,這個功能 尚未在默認情況下。您可以使用
-Xexperimental
編譯器選項啓用它。當啓用該選項時,類似於Java 8,Scala 2.12允許 通過傳遞 lambda來實例化任何類型的單一抽象方法。
但是,使用搖籃和IntelliJ,我不能讓下面的編譯:
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()
的build.gradle:
apply plugin: 'scala'
group = 'name.abhijitsarkar.scala'
version = '1.0-SNAPSHOT'
tasks.withType(ScalaCompile) {
scalaCompileOptions.useAnt = false
scalaCompileOptions.additionalParameters = ["-feature", "-Xexperimental"]
targetCompatibility = "1.8"
}
dependencies {
compile 'org.scala-lang:scala-library:2.12.0-M3'
compile 'com.typesafe.akka:akka-stream-experimental_2.11:2.0.3'
compile 'io.reactivex:rxjava:1.1.0'
testCompile 'org.scalatest:scalatest_2.12.0-M3:3.0.0-M12'
}
我不確定關於2.12.0-M3,但是對於2.11.7,我似乎有時(總是?)需要將lambda明確地提取到相應SAM類型的聲明值中。 (這是我很希望很快消失的頭痛) –
@DavidMoles <2.12.x Java 8支持是實驗性的。 2.12開始它應該是官方的。 http://scala-lang.org/news/2.12-roadmap/ –
什麼是編譯器錯誤? – nafg