2014-02-21 181 views
0

在我的Scala應用程序我有兩個抽象類:斯卡拉嵌套參數化類

abstract class Definition 
abstract class Evaluator[T <: Definition] 

我也有一些定義和相應的評估。我試圖創建的類是這樣的類:

abstract class AbstractEvaluationContext[E <: Evaluator[D]] 

用一些方法。

我的問題是:如何訪問評估者要評估的定義類型。例如。帶類:

class SomeEvaluationContext extends AbstractEvaluationContext[SomeEvaluator[SomeDefinition]] 

如何在AbstractEvaluationContext類中獲取SomeDefinition類型?

例如我想定義的方法:

def getDefinition(): D = ... 

其返回類型將作爲評估參數傳遞的定義。

回答

2

你必須定義你的類是這樣的:

abstract class AbstractEvaluationContext[D <: Definition, E <: Evaluator[D]] { 
    def getDefinition(): D 
} 

class SomeEvaluationContext extends 
    AbstractEvaluationContext[SomeDefinition, SomeEvaluator[SomeDefinition]] { 
    def getDefinition(): SomeDefinition = ??? 
} 

其實你有問題的代碼是無效的。沒有類型的聲明D

scala> abstract class AbstractEvaluationContext[E <: Evaluator[D]] 
<console>:9: error: not found: type D 
     abstract class AbstractEvaluationContext[E <: Evaluator[D]] 
                  ^
+0

謝謝,但沒有任何方法可以避免傳遞定義類型兩次?由於SomeDefinition已經被包含爲SomeEvaluator參數,我傾向於編寫[SomeEvaluator [SomeDefinition]],而不是[SomeDefinition,SomeEvaluator [SomeDefinition]]。 – gysyky

+0

@gysyky:不,你必須指定兩個類型參數。 – senia