我有以下课程:

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

10-05 21:42