#java #generics #inheritance
#java #дженерики #наследование
Вопрос:
У меня есть 2 разных типа менеджеров данных, один наследует другой, и оба полагаются на 1 базовый класс данных и выглядят следующим образом:
public abstract class BaseDataType {
...
}
public class BaseManager<DataType extends BaseDataType> implements ListModel{
...
public final DataType get(index i){
return dataList.get(i);
}
...
}
public class BaseSQLManager<DataType extends BaseDataType, Adapter extends SQLAdapter>
extends BaseManager<DataType>{
...
}
Я понимаю, что использование BaseSQLManager m =new BaseSQLManager<Property, PropertSQLAdapter>();
позволило бы мне использовать Property p = m.get(i);
, однако мне сообщили, что метод get возвращает BaseDataType.
Я уверен, что мне здесь чего-то не хватает, и я не могу понять, в чем дело. Объяснение того, почему это не работает, действительно помогло бы. Спасибо
Ответ №1:
BaseSQLManager m =new BaseSQLManager<Property, PropertSQLAdapter>();
Да, вам не хватает параметра type в объявлении переменной, т. е. тип m
не ограничивает параметр type, вот почему известно, что get() возвращает только то, что расширяет BaseDataType . Это должно быть:
BaseSQLManager<Property, PropertSQLAdapter> m
= new BaseSQLManager<Property, PropertSQLAdapter>();
Комментарии:
1. Как это неловко, конечно, смотрю на это так долго, что не вижу леса за деревьями. Большое вам спасибо, я приму ваш ответ, как только это позволит мне