Después de la actualización de Wicket 7 a Wicket 8, I encounterd múltiples advertencias de borrado en IntelliJ.
Por ejemplo, cuando se utiliza AjaxLink
IntelliJ se queja
'SetDefaultModel (modelo IModel)' en enfrentamientos 'org.apache.wicket.MarkupContainer' con 'setDefaultModel (modelo IModel)' en 'org.apache.wicket.IGenericComponent'; Ambos métodos han borrado misma embargo, ni anula la otra
¿Hay algo que pueda hacer al respecto?
Este error se produce cuando no se da AjaxLink
un tipo genérico. El error se produce cuando se hace:
new AjaxLink("id")
En lugar de algo así como:
new AjaxLink<Void>("id")
AjaxLink tiene la siguiente definición:
public abstract class AjaxLink<T> extends AbstractLink implements IAjaxLink, IGenericComponent<T, AjaxLink<T>>
La clase ancestro es MarkupContainer
, que define:
public MarkupContainer setDefaultModel(final IModel<?> model)
Y se pone en práctica IGenericComponent
, que tiene los tipos genéricos <T, C extends IGenericComponent<? super T, ?>>
que se asignan los tipos <T,AjaxLink<T>>
y define el método:
Component setDefaultModel(IModel<?> model);
Ahora, no estoy del todo seguro si entiendo completamente el problema, pero de alguna manera debido a la falta de tipos genéricos, el compilador no puedo entender que la aplicación de MarkupContainer
(que regresa MarkupContainer
) es covariante con el método definido en IGenericComponent
.