繁体   English   中英

如何将 ArrayBuffer[Implementation] 分配给 Scala 中的 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 编译器向我显示了这样的错误:

ArrayBuffer[Element] 类型的表达式不符合预期的 ArrayBuffer[IElement] 类型

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

这里查看 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM