les extiendo una clase definida en una biblioteca que no puedo cambiar:¿Se pueden evitar las advertencias no controladas al anular un método con parámetros de tipo sin formato?
public class Parent
{
public void init(Map properties) { ... }
}
Si estoy definiendo una clase de 'niño' que se extiende de Padres y estoy usando Java 6 con los genéricos, ¿cuál es la mejor manera de anular el método init sin obtener advertencias sin marcar?
public class Child extends Parent
{
// warning: Map is a raw type. References to generic type Map<K,V> should be parameterized
public void init(Map properties) { }
}
Si añado parámetros genéricos, me sale: se produce
// error: The method init(Map<Object,Object>) of type Child has the same erasure as init(Map) of type Parent but does not override it
public void init(Map<Object,Object>) { ... }
// same error
public void init(Map<? extends Object,? extends Object>) { ... }
// same error
public void init(Map<?,?>) { ... }
Este error independientemente de si utilizo un tipo específico, un comodín acotada, o un comodín sin límites. ¿Existe una forma correcta o idiomática de anular un método no genérico sin advertencias y sin usar @SuppressWarnings ("desmarcado")?
@SuppressWarnings es definitivamente su mejor apuesta aquí. Apesta, pero eso es lo que sucede cuando intentas forzar genéricos a una biblioteca que no los usa. –
'@SuppressWarnings (" rawtypes ")' también debería ser suficiente. –