mam rozszerzenie klasy zdefiniowanej w bibliotece, których nie mogę zmienić:Czy można pominąć niezaznaczone ostrzeżenia podczas przesłaniania metody parametrami typu surowego?
public class Parent
{
public void init(Map properties) { ... }
}
Jeśli jestem definiowania klasy „dziecko”, który rozciąga się rodzicem i używam Java 6 z rodzajowych, co jest najlepszym sposobem nadpisać metodę init bez uzyskiwania niezaznaczonych ostrzeżeń?
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) { }
}
Jeśli dodać parametry rodzajowe, otrzymuję:
// 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<?,?>) { ... }
Błąd ten występuje niezależnie od tego, czy mogę używać określonego typu, ograniczonego wieloznaczny, lub nieograniczony wieloznaczny. Czy istnieje poprawny lub idiomatyczny sposób nadpisania nie ogólnej metody bez ostrzeżeń i bez użycia @SuppressWarnings ("odznaczone")?
@SuppressWarnings jest zdecydowanie najlepszym wyborem. Jest do bani, ale tak się dzieje, gdy próbujesz zmusić generycznych do biblioteki, która ich nie używa. –
'@SuppressWarnings (" rawtypes ")' powinno również wystarczyć. –