Я расширяю класс, определенный в библиотеке, который я не могу изменить:
public class Parent
{
public void init(Map properties) { ... }
}
Если я определяю класс 'Child', расширяющий Parent, и использую Java 6 с обобщениями, каков наилучший способ переопределить метод init без получения непроверенных предупреждений?
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) { }
}
Если я добавлю общие параметры, я получу:
// 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<?,?>) { ... }
Эта ошибка возникает независимо от того, использую ли я определенный тип, ограниченный подстановочный знак или неограниченный подстановочный знак. Есть ли правильный или идиоматический способ переопределить неуниверсальный метод без предупреждений и без использования @SuppressWarnings («unchecked»)?