Java 中没有合适的通用名称和 HAS-A 关系
No suitable name with generic and HAS-A relation in Java
我有以下 类:
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>{}
元素由视图和模型组成。 View 知道元素和模型,模型只知道元素(不要问这是什么模式——这不重要)。我有 AbstractElement 和 Temp。温度也可以遗传。在 Temp 中,我需要重写 newView 方法。但是,我在 LINE X
得到 not suitable method found for select
。我的错误是什么?
编辑:注入和实例是
javax.enterprise.inject.Instance;
javax.inject.Inject;
您使用了很多原始类型作为类型参数。这不会很顺利。
getViewInstance()
in Temp
给你 Instance<V>
where V extends TempView
.
viewInstance.select
适用于 Class<U> subtype
,其中 U extends V
(扩展 TempView
)。 V
可以是 TempView
的任何子类,因此 TempView
不能替代 U
,因此您不能将 Class<TempView>
传递给 select
。
我有以下 类:
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>{}
元素由视图和模型组成。 View 知道元素和模型,模型只知道元素(不要问这是什么模式——这不重要)。我有 AbstractElement 和 Temp。温度也可以遗传。在 Temp 中,我需要重写 newView 方法。但是,我在 LINE X
得到 not suitable method found for select
。我的错误是什么?
编辑:注入和实例是
javax.enterprise.inject.Instance;
javax.inject.Inject;
您使用了很多原始类型作为类型参数。这不会很顺利。
getViewInstance()
in Temp
给你 Instance<V>
where V extends TempView
.
viewInstance.select
适用于 Class<U> subtype
,其中 U extends V
(扩展 TempView
)。 V
可以是 TempView
的任何子类,因此 TempView
不能替代 U
,因此您不能将 Class<TempView>
传递给 select
。