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 のサブタイプであるオブジェクトの配列を意味しますが、必要なのは Object のサブタイプである同じ型 X のオブジェクトの配列です。要するに、それは単なるスコープの問題です。

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