Je suis assez à l'aise avec les génériques et autres, mais dans ce cas particulier, j'ai une question concernant l'avertissement "Type de sécurité: non fonte de .. à ..".Type de sécurité: Coulée incontrôlée entre Class-Objects
Fondamentalement, j'avoir une liste d'objets de classe et maintenant je veux obtenir un sous-ensemble de ces qui mettent en œuvre une interface spéciale, mais la liste qui en résulte devraient également avoir ce type spécial:
...
private List<Class<?>> classes;
public List<Class<? extends Concrete>> getConcreteClasses() {
List<Class<? extends Concrete>> concreteClasses = new LinkedList<Class<? extends Concrete>>();
for (Class<?> clazz: this.classes) {
for (Class<?> i : clazz.getInterfaces()) {
if (i.equals(Concrete.class)) {
concreteClasses.add((Class<? extends Concrete>) clazz);
}
}
}
return concreteClasses;
}
L'avertissement est bien sûr en rapport avec la distribution de type:
Type safety: Unchecked cast from Class<?> to Class<? extends Concrete>
Puis-je me débarrasser de la distribution de type ou devrais-je supprimer l'avertissement avec @SuppressWarnings (« non contrôlée »)?
Merci pour les réponses!
PS: L'environnement est Java 6.
Solution: Au lieu de
concreteClasses.add((Class<? extends Concrete>) clazz);
utilisation
concreteClasses.add(clazz.asSubclass(Concrete.class));
Excellente réponse, sauvé ma vie ici. –