Наследование Java Generics

#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. Как это неловко, конечно, смотрю на это так долго, что не вижу леса за деревьями. Большое вам спасибо, я приму ваш ответ, как только это позволит мне