我在这里实施了ArrayList
public class JsonList<T> extends ArrayList<T>{
//extended functions
}
创建ArrayList时,您可以执行List<?> arrayList = new ArrayList<>(alreadyCreatedList);
我希望能够使用我的JsonList执行此操作。但是目前,JsonList只有默认的构造函数JsonList&lt;&gt;()。我尝试像这样复制ArrayList构造函数
public JsonList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// defend against c.toArray (incorrectly) not returning Object[]
// (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array.
this.elementData = EMPTY_ELEMENTDATA;
}
}
在创建JsonList实例时,我做了
JsonList<?> jsonList = new JsonList<>(alreadyCreatedList);
但是,元素不会保存。它返回empty array
。此外,我无法再创建空实例JsonList<?> jsonList = new JsonList<>();
解决方案: 我不知道为什么我没有想到它,但对于那里的人来说,它是
public JsonList(Collection<? extends E> c) {
super(c); // <-- invoke the appropriate super constructor
}
超级(c)就是你所需要的。
答案 0 :(得分:1)
如果没有第一行super(c);
,编译器将插入super()
,它不会调用你想要的那个(Collection<? extends E> c
)。
public JsonList(Collection<? extends E> c) {
super(c); // <-- invoke the appropriate super constructor
elementData = c.toArray();
// ...
}