如何在 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)
我正尝试在 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)