从Wicket 7升级到Wicket 8后,我在IntelliJ中遇到了多个擦除警告。
例如。使用AjaxLink
时IntelliJ抱怨
'setDefaultModel(IModel model)'在
'org.apache.wicket.MarkupContainer'与发生冲突
'setDefaultModel(IModel model)'在
'org.apache.wicket.IGenericComponent';两种方法的擦除相同
却没有一个超越另一个
有什么我可以做的吗?
最佳答案
当您不给AjaxLink
泛型类型时,会发生此错误。例如:
new AjaxLink("id")
而不是这样的:new AjaxLink<Void>("id")
AjaxLink具有以下定义:public abstract class AjaxLink<T> extends AbstractLink implements IAjaxLink, IGenericComponent<T, AjaxLink<T>>
祖先类是MarkupContainer
,它定义了:public MarkupContainer setDefaultModel(final IModel<?> model)
它实现了IGenericComponent
,它具有通用类型<T, C extends IGenericComponent<? super T, ?>>
,这些类型被分配了<T,AjaxLink<T>>
类型并定义了方法:Component setDefaultModel(IModel<?> model);
现在,我不确定我是否能完全理解问题,但是由于缺少通用类型,编译器无法确定MarkupContainer
的实现(返回MarkupContainer
)与IGenericComponent
中定义的方法是协变的。