Задать вопрос
@woodhead

Как выполнить приведение параметризованных типов при 'Unchecked assignment'?

Как правильно выполнить приведение типов в следующей функции:

public static <T> Dao<T> getDao(Class<T> cl){
    for(Dao dao : daoList){
        if (cl == dao.getParameterizedClass())
            return dao;
    }
    return null;
}


Дело в том, что в строке return dao слово dao выделяется и появляется предупреждение Unchecked assignment: 'dao.Dao' to 'dao.Dao<T>.

Вот так выглядит класс, содержащий эту функцию:

public abstract class DaoFactory {

    private static final List<Dao<?>> daoList = Arrays.asList(
            new DaoImpl<>(Person.class)    
    );

    public static <T> Dao<T> getDao(Class<T> cl){
        for(Dao dao : daoList){
            if (cl == dao.getParameterizedClass())
                return dao;
        }
        return null;
    }
}


А это интерфейс Dao:

public interface Dao<T> {  
    Class<T> getParameterizedClass();
}


и его реализация:

public class DaoImpl<T> implements Dao<T> {

    private Class<T> parameterizedClass;

    DaoImpl(Class<T> cl){
        this.parameterizedClass = cl;
    }

    @Override
    public Class<T> getParameterizedClass() {
        return parameterizedClass;
    }
}


Разумеется, можно сделать подавление предупреждения, или сделать возвращаемый тип непараметризованным - не Dao<T>, а просто Dao. Есть ли ещё способ устранить предупреждение?
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы