Sono abbastanza a mio agio con i generici e così via, ma in questo caso speciale ho una domanda riguardante l'avviso "Tipo sicurezza: cast non selezionato da .. a ..".Tipo di sicurezza: cast non controllato tra gli oggetti di classe
Fondamentalmente ho una lista di oggetti di classe e ora voglio ottenere un sottoinsieme di questi che implementano un'interfaccia speciale, ma la lista risultante dovrebbe avere anche quella speciale Tipo:
...
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'avvertimento è, naturalmente, relative al tipo colato:
Type safety: Unchecked cast from Class<?> to Class<? extends Concrete>
posso liberarmi di tipo colato o dovrei eliminare l'avviso con @SuppressWarnings ("incontrollato")?
Grazie per le risposte!
PS: L'ambiente è Java 6.
Soluzione: Invece di
concreteClasses.add((Class<? extends Concrete>) clazz);
uso
concreteClasses.add(clazz.asSubclass(Concrete.class));
Ottima risposta, mi ha salvato la vita qui. –