Я простирающийся класс, определенный в библиотеке, которую я не могу изменить:Можно ли избежать отмеченных предупреждений при переопределении метода с параметрами сырого типа?
public class Parent
{
public void init(Map properties) { ... }
}
Если я определяю класс «ребенок», который расширяет 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»)?
@SuppressWarnings определенно ваш лучший выбор здесь. Отстой, но это то, что происходит, когда вы пытаетесь заставить generics в библиотеку, которая их не использует. – 2008-10-28 02:52:56