Приведение к пользовательскому списку ArrayList - PullRequest
0 голосов
/ 18 октября 2018

Я создал собственный объект ArrayList и получаю сообщение об ошибке при попытке привести к этому объекту.Я думаю, что что-то неправильно понял, так как ожидал, что это сработает.Если у меня есть собственный объект ArrayList, который будет обрабатывать только ArrayList из целых чисел:

public class CustomArrayList extends ArrayList<Integer>{

    public void customMethod() {
        // do things with integer arraylist
    }
}

Я ожидаю, что мог бы создать список целых чисел, как показано ниже:

List<Integer> myList = new ArrayList<>();
((CustomArrayList) myList).customMethod();

Но этоприводит к исключению класса приведения.Может кто-нибудь объяснить, пожалуйста, что я делаю неправильно и как успешно добиться актерского состава?Спасибо

1 Ответ

0 голосов
/ 18 октября 2018

Ваш CustomArrayList является ArrayList<Integer>, но ArrayList<Integer> не является CustomArrayList.

Если вы хотите преобразовать произвольный ArrayList<Integer> в CustomArrayList, вы можете написать:

List<Integer> myList = new ArrayList<>();
CustomArrayList customList = new CustomArrayList(myList);
customList.customMethod();

Это потребует добавления конструктора к CustomArrayList, который принимает Collection<Integer> и передает его ArrayList public ArrayList(Collection<? extends E> c конструктору.

public CustomArrayList(Collection<Integer> c) {
    super(c);
}

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

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