扩展ArrayList并使用/创建类似的构造函数

时间:2018-01-31 01:55:05

标签: java list arraylist

我在这里实施了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)就是你所需要的。

1 个答案:

答案 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();
    // ...
}