Я пытаюсь протестировать класс Java 8, используя rx.Observable
от Scala Test. Согласно Scala 2.12.0-M3
release notes:Scala 2.12 и Java 8 SAM interop не компилируется
LAMBDA СИНТАКСИС ДЛЯ SAM ВИДОВ (ЭКСПЕРИМЕНТАЛЬНЫЙ) Как М3, эта функция еще не включена по умолчанию. Вы можете включить его с помощью опции компилятора
-Xexperimental
.Когда опция включена, то аналогично Java 8, Scala 2.12 допускает создание экземпляра любого типа с помощью одного абстрактного метода путем пропускания лямбда .
Однако, используя Gradle и 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 мне кажется, что я иногда (всегда?) Должен явно извлекать лямбды в объявленные значения соответствующего типа SAM. (Которая является головной болью, которую я надеюсь, скоро уйдет.) –
@DavidMoles <2.12.x Поддержка Java 8 - экспериментальная. 2.12 и далее он должен быть официальным. http://scala-lang.org/news/2.12-roadmap/ –
Какая ошибка компилятора? – nafg