2014-02-21 3 views
0

중첩. 제가 만들고자하는 것은 다음과 같은 클래스입니다 :스칼라 내가 두 개의 추상 클래스를 내 스칼라 응용 프로그램에서 매개 변수화 클래스

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

일부 방법이 있습니다.

내 질문은 : 평가자가 평가할 정의 유형에 어떻게 액세스 할 수 있습니까? 예. 수업 :

class SomeEvaluationContext extends AbstractEvaluationContext[SomeEvaluator[SomeDefinition]] 

어떻게 AbstractDefinition 유형을 내 AbstractEvaluationContext 클래스에서 얻을 수 있습니까?

예 I는 메소드를 정의하고자 : 리턴 타입

def getDefinition(): D = ... 

평가 파라미터로 전달 정의 될 것이다.

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

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

가 실제로 문제의 코드가 잘못되었습니다

답변

2

당신은 수업이 방법을 정의해야합니다. 유형 D의 어떤 선언이 없습니다 :

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

감사합니다,하지만 두 번 통과 정의 유형을 피할 수있는 방법이 없다? [SomeDefinition, SomeEvaluator [SomeDefinition]] 대신 SomeEvaluator 매개 변수로 SomeDefinition이 이미 포함되어 있으므로 [SomeEvaluator [SomeDefinition]]을 작성하는 것이 좋습니다. – gysyky

+0

@gysyky : 아니요, 두 가지 유형 매개 변수를 모두 지정해야합니다. – senia

관련 문제