자바

2017-09-03 6 views
1

에서 일반적이고 HAS-A 관계에 더 적합한 이름은 내가 다음과 같은 클래스가 없습니다 :자바

public abstract class AbstractElement<V extends AbstractElementView, M extends AbstractElementModel> { 

    @Inject 
    private Instance<V> viewInstance; 

    protected Instance<V> getViewInstance() { 
     return viewInstance; 
    } 

    public abstract V newView(); 
} 

public abstract class AbstractElementModel<E extends AbstractElement> {} 

public abstract class AbstractElementView<E extends AbstractElement, M extends AbstractElementModel> {} 

public class Temp<V extends TempView, M extends TempModel> extends AbstractElement<V, M>{ 
    @Override 
    public V newView() { 
     return getViewInstance().select(TempView.class).get();//LINE X 
    } 
} 

public class TempModel<E extends Temp> extends AbstractElementModel<E> {} 

public class TempView<E extends Temp, M extends TempModel> extends AbstractElementView<E, M>{} 

요소는보기와 모델로 구성되어 있습니다. 뷰는 요소와 모델을 알고 모델은 요소 만 알고 있습니다 (어떤 패턴인지는 묻지 않음 - 중요하지 않음). 나는 AbstractElement와 Temp를 가지고있다. 온도 또한 상속 될 수 있습니다. Temp에서 newView 메서드를 재정의해야합니다. 그러나 LINE Xnot suitable method found for select이 표시됩니다. 내 실수는 무엇입니까?

편집 :를 주입 및 인스턴스는 사용자가 입력 매개 변수로 원시 유형을 많이 사용

javax.enterprise.inject.Instance; 
javax.inject.Inject; 
+0

코드에 '인스턴스'가 누락되었습니다. – lexicore

+0

@lexicore 죄송합니다, 찾을 수 없습니다. 자세한 내용을 제공해 주시겠습니까? –

+0

코드에는이 'private instance viewInstance;'가 있지만 코드 스 니펫에 'Instance'가 포함되어 있지 않습니다. 찾을 수 없다 니 무슨 소리 니? ' – lexicore

답변

1

있습니다. 이것은 잘되지 않을 것입니다.

Instance<V>입니다. V extends TempView입니다.

viewInstance.selectClass<U> subtype에 해당합니다. 여기에서 U extends V (확장자는 TempView)입니다. VTempView의 하위 클래스 일 수 있으므로 TempViewU을 대체 할 수 없으므로 Class<TempView>select으로 전달할 수 없습니다.