从 Wicket 7 升级到 Wicket 8 后,我在 IntelliJ 中遇到了多个擦除警告。
例如,当使用AjaxLink
IntelliJ 抱怨时
'setDefaultModel(IModel model(' in 'org.apache.wicket.MarkupContainer' 与 'setDefaultModel(IModel model(' in '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
中定义的方法共变。