J'étends une classe définie dans une bibliothèque que je ne peux pas changer:Des avertissements non contrôlés peuvent-ils être évités lors du remplacement d'une méthode avec des paramètres de type brut?
public class Parent
{
public void init(Map properties) { ... }
}
Si je suis en train de définir une classe « enfant » qui étend Parent et j'utilise Java 6 avec les génériques, ce qui est la meilleure façon de remplacer la méthode init sans obtenir des avertissements non vérifiés?
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 j'ajouter des paramètres génériques, je reçois:
// 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<?,?>) { ... }
Cette erreur se produit indépendamment du fait que j'utilise un type particulier, un caractère générique borné, ou un caractère générique sans bornes. Existe-t-il un moyen correct ou idiomatique de remplacer une méthode non générique sans avertissement, et sans utiliser @SuppressWarnings ("non coché")?
@SuppressWarnings est certainement votre meilleur pari ici. Suce, mais c'est ce qui arrive quand vous essayez de forcer des génériques dans une bibliothèque qui ne les utilise pas. –
'@SuppressWarnings (" rawtypes ")' devrait également suffire. –