我有以下课程:
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也可以被继承。在Temp中,我需要重写newView方法。但是,我在
not suitable method found for select
处得到LINE X
。我怎么了编辑:注入和实例是
javax.enterprise.inject.Instance;
javax.inject.Inject;
最佳答案
您使用许多原始类型作为类型参数。这不会顺利进行。getViewInstance()
中的Temp
为您提供Instance<V>
,其中V extends TempView
。viewInstance.select
适用于Class<U> subtype
,其中U extends V
(扩展了TempView
)。 V
可以是TempView
的任何子类,因此TempView
不能替代U
,因此您不能将Class<TempView>
传递给select
。