1

私は次のクラスを持っています:

abstract class Record {}

class Record1 extends Record {}

class Record2 extends Record {}

class MyTable[T <: Record : Manifest] extends externalLibrary.Table[T] {
    def method {}
}

object MyTable1 extends MyTable[Record1] {}

object MyTable2 extends MyTable[Record2] {}

そして今、メソッドパラメーターで MyTable サブクラスを受け入れようとしています

def testMethod[T <: MyTable[Record]](t: T) {
    t.method
}

val test = method(MyTable1)

これにより、MyTable1 が T に準拠していないというエラーが生成されます。メソッドを次のように変更すると[T >: MyTable[Record]]、これは呼び出しポイントで型チェッカーを満たしますが、もちろん t.method にアクセスできなくなります。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

宣言サイトで分散アノテーションを使用して、クラスを共変にします。

class MyTable[+T <: Record : Manifest]
于 2013-09-05T16:44:44.500 に答える