2014-03-13 60 views
3

我喜歡定義一個返回一個Class對象的工廠方法,例如創建gui對象。如何返回一個子類的類

我這樣定義

def getWorkerClass2[T <: Component]():Class[T] = {return classOf[Frame]; } 

它返回組件的類的子類的方法,但斯卡拉編譯器與

type mismatch; 
found : Class[java.awt.Frame](classOf[java.awt.Frame]) 
required: Class[T] 
    def getWorkerClass2[T <: Component]():Class[T] = {return classOf[Frame]; } 
                  ^

抱怨,我不知道爲什麼。

編輯: 我使用Scala的2.10

回答

3

方法1:

class C { 
    def getWorkerClass2: Class[_ <: Component] = classOf[Frame] 
} 

方法2:

trait Worker { 
    def getWorkerClass2: Class[_ <: Component] 
} 

class A extends Worker { 
    def getWorkerClass2 = classOf[Frame] 
} 

class B extends Worker { 
    def getWorkerClass2 = classOf[Window] 
} 
+0

當嘗試編譯方法2,我會得到相同的編譯錯誤,如我在我的問題得到:重寫方法getWorkerClass2類型[T <:java.awt.Component] => Class [T]; 方法getWorkerClass2具有不兼容的類型 def getWorkerClass2 [T <:Component]:Class [Frame] = classOf [Frame] ^ – user2706510

+0

哦,對不起,我認爲它錯了,當它認爲它會工作:)請參閱我已編輯的答案 – serejja