Как использовать супер тип универсального класса в Java? - PullRequest
0 голосов
/ 07 января 2012

В моем коде у меня есть несколько ArrayLists, которые передаются в метод сортировки.Каждый из этих списков ArrayList имеет разные общие типы, но все эти типы являются реализациями Sorter.Метод сортировки предназначен для приема списков ArrayLists типа Sorter.Моя проблема в том, что я не нашел способа приведения типов массивов к их супертипу, чтобы они могли быть переданы в метод сортировки.Вот каков формат метода сортировки:

public static ArrayList<Sorter> quicksort(ArrayList<Sorter> members);

Класс Spatial является реализацией сортировщика следующим образом:

public abstract class Spatial implements Sorter

Однако, когда вызывается метод быстрой сортировки, генерируетсяошибка (children - это ArrayList типа Spatial):

children = ListSorter.quicksort(children);

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 07 января 2012

Попробуйте это:

public static <T extends Sorter> ArrayList <T> quicksort(ArrayList<T> members);

Или даже лучше, это:

public static <T extends Sorter> List <T> quicksort(List<T> members);
4 голосов
/ 07 января 2012

Обобщения в Java не являются ковариантными , т.е. List<Sorter> не является базовым классом List<Spatial>. Смотрите эту статью, почему бы и нет: http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...