Như đã nói, bạn cần biến mảng của bạn thành loại phần tử của mình, vì Arala của Scala không có biến thể như Java/C#.
Mã này sẽ làm cho nó hoạt ví dụ:
class Table[+T](rowData: Array[Array[T]],columnNames: Seq[_])
này chỉ nói với trình biên dịch rằng T
nên được hiệp biến (điều này cũng tương tự như Java ? extends T
hoặc 's out T
C#).
Nếu bạn cần kiểm soát nhiều hơn về những loại được phép và không, bạn cũng có thể sử dụng:
class Table[T <: Any](rowData: Array[Array[T]],columnNames: Seq[_])
này sẽ cho trình biên dịch rằng T
thể được bất kỳ subtype của Any
(có thể được thay đổi từ Any
cho lớp bạn yêu cầu, chẳng hạn như CharSequence
trong ví dụ của bạn).
Cả hai trường hợp làm việc cùng trong kịch bản này:
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]
Edit: Nếu lớp trong câu hỏi không có trong kiểm soát của bạn, khai báo kiểu bạn muốn một cách rõ ràng như thế này:
val people: Array[Array[Any]] = Array(Array("John", "25"), Array("Mary", "22"))
Cập nhật
Đây là mã nguồn trong câu hỏi:
// TODO: use IndexedSeq[_ <: IndexedSeq[Any]], see ticket [#2005][1]
def this(rowData: Array[Array[Any]], columnNames: Seq[_]) = {
Tôi tự hỏi nếu ai đó quên để loại bỏ các khắc phục, vì # 2005 được cố định kể từ tháng 5 năm 2011 ...
Tôi nghĩ rằng đây là giả định rằng Bảng là lớp của tôi. Bảng tôi cần là scala.swing.Table. Ngoài ra, asInstanceOf dường như không giúp được gì. –
Cảm ơn, việc gõ rõ ràng thực hiện công việc. (Tôi nghĩ rằng tôi đã thử rằng trước đó nhưng tôi đoán tôi đã sử dụng mã đối tượng cũ.) Tôi thấy tôi có hàng và cột đảo ngược - okay, đó là dễ dàng - và tiêu đề của tôi không hiển thị.Không quan trọng cho những gì tôi đang làm, mặc dù. –