Безопасность типов: непроверенное приведение между объектами класса - PullRequest
6 голосов
/ 21 мая 2009

Мне вполне нравятся дженерики и тому подобное, но в этом особом случае у меня есть вопрос, касающийся предупреждения "Тип безопасности: непроверенный приведение от .. до ..".

По сути, у меня есть объекты 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));

Ответы [ 2 ]

6 голосов
/ 21 мая 2009
0 голосов
/ 21 мая 2009

Вы можете подавить предупреждения, потому что уверены, что приведение будет работать, потому что все добавленные классы реализуют интерфейс Concrete ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...