Как правильно выполнить приведение типов в следующей функции:
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
. Есть ли ещё способ устранить предупреждение?