Мне вполне нравятся дженерики и тому подобное, но в этом особом случае у меня есть вопрос, касающийся предупреждения "Тип безопасности: непроверенный приведение от .. до ..".
По сути, у меня есть объекты List of Class, и теперь я хочу получить подмножество объектов, которые реализуют специальный интерфейс, но результирующий список должен также иметь этот специальный тип:
...
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;
}
Предупреждение, конечно, относится к типу приведения:
Type safety: Unchecked cast from Class<?> to Class<? extends Concrete>
Можно ли избавиться от приведенного типа или отменить предупреждение с помощью @SuppressWarnings ("unchecked")?
Спасибо за ответы!
PS: среда Java 6.
Решение: Вместо
concreteClasses.add((Class<? extends Concrete>) clazz);
использование
concreteClasses.add(clazz.asSubclass(Concrete.class));