我试图构建一个数组数组,将其作为方法的参数。 内部数组的值是任何类型的数据(AnyVal),例如Int或Double。
该方法的签名如下:
def plot[T <: AnyVal](config:Map[String, String], data:Array[Array[T]]): Unit = {
这是代码:
val array1 = (1 to 10).toArray
val array2 = ArrayBuffer[Int]()
array1.foreach { i =>
array2 += (getSize(summary, i))
}
val array3 = new Array[Int](summary.getSize())
val arrays = ArrayBuffer[Array[AnyVal]](array1, array2.toArray, array3) # <-- ERROR1
Gnuplotter.plot(smap, arrays.toArray) # <-- ERROR2
但是,我有两个错误:
可能出现什么问题?
答案 0 :(得分:5)
Array
不是协变的(here's why)
因此Array[Int]
不是Array[AnyVal]
的子类型,因此您无法将其传递到预期为Array[AnyVal]
的位置。
List
会为您做什么吗?
如果性能很重要并且你真的需要使用Array
,你可以简单地将所有内容都投射到Array[Any]
并完成它。
或者,如果您只需要Array[Any]
作为传递给plot
函数的最终类型,则可以使用List
执行所有操作,并将其转换为toArray[Any]
在最后。