正如金已經說了,你需要讓你的陣列協在他的元素類型,因爲Scala的阿拉斯不是協變的像Java的/ C#的。
此代碼將使例如工作:
class Table[+T](rowData: Array[Array[T]],columnNames: Seq[_])
這只是告訴T
應協變的編譯器(這類似於Java的? extends T
或的out T
C#)。
如果您需要了解哪些類型是允許的,哪些不是更多的控制,你也可以使用:
class Table[T <: Any](rowData: Array[Array[T]],columnNames: Seq[_])
這將告訴編譯器T
可以是Any
任何亞型(可從Any
改變到你需要的班級,比如你的例子中的CharSequence
)。
兩種情況下工作同樣在這樣的場景:
scala> val people = Array(Array("John", "25"), Array("Mary", "22"))
people: Array[Array[java.lang.String]] = Array(Array(John, 25), Array(Mary, 22))
scala> val headers = Seq("Name", "Age")
headers: Seq[java.lang.String] = List(Name, Age)
scala> val myTable = new Table(people, headers)
myTable: Table[java.lang.String] = [email protected]
編輯:如果有問題的類不在你的控制,聲明你要明確的是這樣的類型:
val people: Array[Array[Any]] = Array(Array("John", "25"), Array("Mary", "22"))
更新
這是有問題的源代碼:
// TODO: use IndexedSeq[_ <: IndexedSeq[Any]], see ticket [#2005][1]
def this(rowData: Array[Array[Any]], columnNames: Seq[_]) = {
我不知道是否有人忘了刪除的解決方法,因爲#2005自2011年5月固定...
來源
2011-07-18 16:13:40
soc
我認爲這是假設表是我的課。我需要的表是scala.swing.Table。另外,asInstanceOf似乎沒有幫助。 –
謝謝,明確的打字工作。 (我以爲我早些時候嘗試過,但我想我正在使用舊的目標代碼。) 我看到我有行和列顛倒 - 好吧,這很容易 - 我的標題不顯示。不過對於我在做的事情並不關鍵。 –