2013-09-05 22 views
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。我將如何解決這個問題?

回答

3

你讓個教學班,在聲明的網站方差註釋協變:

class MyTable[+T <: Record : Manifest] 
+0

謝謝,我已經試過了,但前面有一個「T是不變的」的錯誤,所以當我看到你的答案,我環顧四周爲解決方案,並改變了我的'def method(t:T)'方法到'def method [U>:T](u:U)',它修復了錯誤 –