从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中定义的方法是协变的。

10-04 14:00