Общие коллекции Java и наследование - PullRequest
1 голос
/ 30 марта 2011

В основном мне нужно иметь абстрактный класс, который содержит поле списка, в котором подробно описывается, что он может содержать подклассы определенного класса, а затем создать конкретный класс, который хранит определенный подкласс этого определенного класса.

Лучше объяснить в коде, я уверен:

public class A {
}

public class B extends A {
}

public abstract class AbsClass {
    protected List<? extends A> list;
}

public class ConClass extends AbsClass {
    list = new ArrayList<B>();
}

С помощью приведенного выше кода я получаю ошибку компилятора

Метод add (capture # 3-of? Extends A)в списке типа не применимо для аргументов (B)

строка, в которой создается список.

Как мне заставить это работать?

1 Ответ

7 голосов
/ 30 марта 2011

Можете ли вы просто набрать AbsClass?

public abstract class AbsClass<T extends A> {
    protected List<T> list;
}

public class ConClass extends AbsClass<B> {
    list = new ArrayList<B>();
}

Конечно, в этот момент нет необходимости даже перемещать инстанцирование в подкласс:

public abstract class AbsClass<T extends A> {
    protected List<T> list = new ArrayList<T>();
}

public class ConClass extends AbsClass<B> {
    //... other stuff ...
}
...