在Scala中委托java.util.List#toArray(T [] a)

时间:2012-11-12 20:26:24

标签: java scala

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

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

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

<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](编译器友好建议的)之类的所有可能的变体,但没有运气。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

这也有效:

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

答案 1 :(得分:2)

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

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