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. Как я могу исправить эту проблему?
Спасибо, я попробовал, что и раньше, но получил «Т инвариантный» ошибку, поэтому, когда я увидел свой ответ, который я посмотрел вокруг для решения и завершил изменение методов 'def method (t: T)' 'def method [U>: T] (u: U)', которые исправили ошибку –