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 回答