方法参数中的协变输入

时间:2013-09-05 16:11:21

标签: scala

我有以下课程:

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 。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您在声明网站上使用方差注释创建类协变:

class MyTable[+T <: Record : Manifest]