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

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

3 голосов
/ 10 апреля 2011

У меня есть 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 Ответ

3 голосов
/ 10 апреля 2011
BaseSQLManager m =new BaseSQLManager<Property, PropertSQLAdapter>();

Да, вы пропускаете параметр типа в объявлении переменной, то есть тип m не ограничивает параметр типа, поэтому известно, что get () возвращает только то, что расширяет BaseDataType. Должно быть:

BaseSQLManager<Property, PropertSQLAdapter> m 
    = new BaseSQLManager<Property, PropertSQLAdapter>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...