我在scala中编写了这段代码:
def push(x: T): Unit = ref.updateAndGet(new UnaryOperator[List[T]] {
override def apply(t: List[T]): List[T] = x :: t
})
Run Code Online (Sandbox Code Playgroud)
并希望以更实用的方式重写它,比如
def push(x: T): Unit = ref.updateAndGet(t => x::t)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.是否可以正确地进行这样的铸造?
scala-java8-compat有java8函数转换器
import scala.compat.java8.FunctionConverters._
def push(x: T): Unit = ref.updateAndGet(asJavaUnaryOperator(t => x::t))
Run Code Online (Sandbox Code Playgroud)
在 Scala 2.12(RC 1 已经发布)中,这将自动完成(即ref.updateAndGet(t => x::t)正常工作)。在 Scala 2.11 中,这已经存在,但在-Xexperimental编译器标志下,并且支持不完整(我不知道确切的限制)。