如何在 Scala 中将 ArrayBuffer[Implementation] 分配给 ArrayBuffer[Interface]

How could assign ArrayBuffer[Implementation] to ArrayBuffer[Interface] in Scala

我正尝试在 Scala 中做类似下面的事情

val buffer1:ArrayBuffer[Element] = ???
val buffer:ArrayBuffer[IElement] = buffer1

其中IElement是我自定义的界面,Element是其中一个元素的实现。 但是 scala 编译器向我显示了这样的错误:

Expression of type ArrayBuffer[Element] doesn't conform to expected type ArrayBuffer[IElement]

我怎样才能让编译器通过它?
scala ArrayBuffer 支持吗?

查看 here 中的 Scala 类型层次结构。如您所见,Int 类型不从 Object 扩展,因此您不能使用 Int 值初始化 ArrayBuffer[Object]。您必须将对象更改为 AnyVal。此外,它的类型是不变的。这意味着两个声明如:

var buffer:ArrayBuffer[AnyVal] = ArrayBuffer.apply(1)

var buffer2:ArrayBuffer[Int] = ArrayBuffer.apply(1)

它们不一样,所以如果你尝试做类似的事情:

buffer = buffer2

编译器给出以下错误:

error: type mismatch;
        found   : scala.collection.mutable.ArrayBuffer[Int]
        required: scala.collection.mutable.ArrayBuffer[AnyVal]
       Note: Int <: AnyVal, but class ArrayBuffer is invariant in type A.
       You may wish to investigate a wildcard type such as `_ <: AnyVal`. (SLS 3.2.10)