Метод addAll () из класса ArrayList <E>не работает - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь понять, почему метод addAll () из ArrayList не работает. У меня есть мой класс:

public class XList<E> extends ArrayList<E> {...

}

С помощью метода:

public XList<E> union(XList<E> input) {
    System.out.println(this);//
    System.out.println(input);
    this.addAll(input);
    return this;
}

System.out.println указывает, что правильные значения находятся в заданных списках, но после добавления «this» не обновляется и возвращается без изменений. Не могли бы вы подсказать мне, на root проблемы? Любая помощь с благодарностью.

SSCCE:

public class Main {
public static void main(String[] args) {
    XList<Integer> list1 = new XList<>(1, 3, 9, 11);
    XList<Integer> list2 = XList.of(5, 6, 9);


    List<Integer> m1 = list1.union(list2);
    System.out.println(m1);

}

}

class XList<E> extends ArrayList<E> {

private List<E> lista;

public XList(E a, E b, E c) {
    lista = new ArrayList<>();
    lista.add(a);
    lista.add(b);
    lista.add(c);
}

public XList(E a, E b, E c, E d) {
    lista = new ArrayList<>();
    lista.add(a);
    lista.add(b);
    lista.add(c);
    lista.add(d);

}

static XList of(Integer a, Integer b, Integer c) {

    return new XList(a, b, c);
}

public XList<E> union(XList<E> input) {

    System.out.println("this: " + this);
    System.out.println("input: " + input);
    this.addAll(input);
    return this;
}


public String toString() {

    return lista.toString();
}

1 Ответ

5 голосов
/ 25 марта 2020

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

На вашем месте я бы удалил «extends ArrayList» и заменил

this.addAll(input);

С

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