Wicket 8 wicket setDefaultModel clashes with setDefaultModel

mrkernelpanic :

After upgrading from Wicket 7 to Wicket 8, I encounterd multiple erasure warnings in IntelliJ.

E.g. when using AjaxLink IntelliJ complains

'setDefaultModel(IModel model)' in 'org.apache.wicket.MarkupContainer' clashes with 'setDefaultModel(IModel model)' in 'org.apache.wicket.IGenericComponent'; both methods have same erasure yet neither overrides the other

Is there anything I can do about it?

Jeroen Steenbeeke :

This error occurs when you do not give AjaxLink a generic type. The error occurs when you do:

new AjaxLink("id")

Instead of something like:

new AjaxLink<Void>("id")

AjaxLink has the following definition:

public abstract class AjaxLink<T> extends AbstractLink implements IAjaxLink, IGenericComponent<T, AjaxLink<T>>

The ancestor class is MarkupContainer, which defines:

public MarkupContainer setDefaultModel(final IModel<?> model)

And it implements IGenericComponent, which has generic types <T, C extends IGenericComponent<? super T, ?>> which are assigned the types <T,AjaxLink<T>> and defines the method:

Component setDefaultModel(IModel<?> model);

Now, I'm not entirely sure if I fully understand the problem, but somehow due to the lack of generic types, the compiler cannot figure out that the implementation from MarkupContainer (which returns MarkupContainer) is covariant with the method defined in IGenericComponent.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=116734&siteId=1