6

我正在编写一个实现(包装)java.util.List 的 Scala 类,即:

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

后者有一个带有 Java 签名的 toArray 方法,如下所示:

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

天真地,我把它写成:

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

但编译器抱怨在 backingList 上对 toArray 的调用需要一个Array[? with java.lang.Object].

我想我已经尝试了所有可能的变化,比如Array[_ >: T with Object](编译器友好地建议),但没有运气。有什么建议么?

4

2 回答 2

3

这也有效:

def toArray[T](a: Array[T with Object]) = backingList.toArray[T](a)
于 2012-11-12T20:34:44.510 回答
2

Array[_ >: T with Object]是 的语法糖Array[X forSome {type X <: Object}],意思是一个对象数组,其类型是 Object 的子类型,但您需要的是相同类型 X 的对象数组,它是 Object 的子类型。所以简而言之,这只是一个范围界定问题。

def toarray(a: Array[X] forSome {type X <: Object}) = backingList toArray a
于 2012-11-12T20:32:56.677 回答