2012-11-12 29 views
6

Tôi đang viết một lớp Scala rằng dụng cụ (kết thúc tốt đẹp) một java.util.List, ví dụ:Đại biểu java.util.List # toArray (T [] a) trong Scala

class MyList(backingList: java.util.List) extends java.util.List 

Sau đó có một phương pháp toArray với một chữ ký Java như thế này:

<T> T[] toArray(T[] a) 

ngây thơ, tôi đã viết điều này như:

def toArray[T](a: Array[T]) = backingList toArray a 

nhưng trình biên dịch phàn nàn rằng cuộc gọi để toArray trên backi ngList mong đợi một số Array[? with java.lang.Object].

Tôi nghĩ rằng tôi đã thử mọi biến thể có thể có trên những thứ như Array[_ >: T with Object] (trình biên dịch đề nghị), nhưng không may mắn. Bất kỳ đề xuất?

+1

Không phải là câu trả lời cho câu hỏi của bạn, nhưng bạn biết giấy gói như vậy đã tồn tại trong 'JavaConversions' /' JavaConverters'? +1 BTW. –

+1

Tôi biết, nhưng đây là trong bối cảnh của 'ObservableList' của JavaFX (mở rộng java.util.List). –

Trả lời

3

này cũng hoạt động:

def toArray[T](a: Array[T with Object]) = backingList.toArray[T](a) 
+0

Thật vậy. 'backingList toArray [T] (a)' (tức là không có dấu chấm) không hoạt động, nhưng đó có thể là một điều cú pháp Scala. –

2

Array[_ >: T with Object] là cú pháp đường cho Array[X forSome {type X <: Object}], có nghĩa là một mảng đối tượng có loại là kiểu con của đối tượng, nhưng những gì bạn cần là một mảng đối tượng cùng loại X, là một kiểu con của đối tượng. Vì vậy, trong ngắn hạn, nó chỉ là một vấn đề phạm vi.

def toarray(a: Array[X] forSome {type X <: Object}) = backingList toArray a 
+0

Tôi không nghĩ rằng nó ghi đè phương thức 'List.toArray'. –

+0

Tôi không nghĩ rằng nó phải, ít nhất là câu hỏi không nói điều đó. Đọc câu hỏi một lần nữa, nó có thể được diễn giải theo cách đó. : D –

+0

Có, nó là nghĩa vụ phải thực hiện 'List.toArray'. –

Các vấn đề liên quan