我有以下课程:
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中,我需要重写newView方法。然而,我得到了not suitable method found for select在LINE X。我犯了什么错?
编辑:注入和实例是
javax.enterprise.inject.Instance;
javax.inject.Inject;发布于 2017-09-03 19:41:34
您使用许多原始类型作为类型参数。这不太顺利。
getViewInstance() in Temp给了您Instance<V> V extends TempView。
viewInstance.select适用于Class<U> subtype,其中U extends V (扩展TempView)。V可以是TempView的任何子类,因此TempView不能替代U,因此不能将Class<TempView>传递给select。
https://stackoverflow.com/questions/46027027
复制相似问题