Разрешить только определенные типы в ArrayList - PullRequest
1 голос
/ 09 октября 2011

Есть ли способ создать подкласс для класса ArrayList, чтобы разрешить только объекты определенного класса (или его подкласса).
В частности, у меня есть базовый класс RecordStatus, и мне нужно создать ArrayLists с объектами на основе этого класса.
Я знаю, что было бы легко создать класс на основе ArrayList<RecordStatus>, но затем, каждый раз, когда я извлекаю элемент из массива, мне нужно привести его к исходному классу.
Есть ли более простой способ сделать это?

Ответы [ 5 ]

2 голосов
/ 09 октября 2011

Есть ли способ создать подкласс класса ArrayList, чтобы разрешить только объекты определенного класса (или его подкласса). Конкретно у меня есть база класс называется RecordStatus и мне нужно создать ArrayLists с объектами на основании этого класса.

Это именно то, что позволяет сделать универсальная конструкция в Java. Обратите внимание, что вам не нужно приводить экземпляры, исходящие из вашего ArrayList<RecordStatus>, если все подклассы RecordStatus имеют одинаковый API. Это нужно сделать только в том случае, если подклассы имеют разные методы / поля. Например, если RecordStatus имеет метод setStatus, а также подкласс, преобразование не требуется, поскольку динамическая диспетчеризация полиморфизма Java обеспечит корректность реализуемого метода в зависимости от типа экземпляра на который метод вызывается во время выполнения.

1 голос
/ 09 октября 2011

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

List<RecordStatus> myList = new ArrayList<RecordStatus>();
//Add values to the list
RecordStatus myRecordStatus = myList.get(0);

Но если вы действительно хотите создать подкласс ArrayList, вы можете сделать следующее:

private class MyArrayList<R extends RecordStatus> extends ArrayList<R> {
      ...
}
0 голосов
/ 09 октября 2011

Попробуйте Collections.checkedList(List<E> list, Class<E> type).Это обеспечит безопасность типов.

0 голосов
/ 09 октября 2011

Я создал arrayList без проблем, используя такую ​​строку

List<RecordStatus> list = new ArrayList<RecordStatus>();
0 голосов
/ 09 октября 2011

ArrayList<? extends RecordStatus> как можно ближе.

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