【发布时间】:2020-03-25 00:27:15
【问题描述】:
我很难理解为什么 ArrayList 中的 addAll() 方法不起作用。 我有我的课:
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”没有得到更新,并且没有修改就返回。 你能告诉我问题的根源吗? 非常感谢任何帮助。
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();
}
【问题讨论】:
-
this.addAll(input);返回true吗? -
刚查了一下,没有……
-
为了获得更好的帮助,请提供minimal reproducible example(又名SSCCE)——简短的代码示例,我们可以将其复制粘贴到我们的机器上,无需任何修改即可运行并重现您遇到的问题。这样我们就可以使用调试器等适当的工具来更容易地找到问题的根源。
-
如果你已经有
extends ArrayList<E>,为什么还要有private List<E> lista;?这样你就有了两个列表,一个在lista下,一个在this下,它们是单独的对象。 -
可能最好的方法是让
XList不扩展ArrayList,而是让它扩展AbstractList。然后重写 get、size、set、add 和 remove 方法,并让它们委托给包含的 ArrayList。
标签: java arraylist collections