【发布时间】:2013-12-02 02:52:13
【问题描述】:
当我尝试为 MyArrayList(java 中的 arraylist 类的个人版本)编写构造函数时,我很困惑为什么会不断收到 java.lang.StackOverFlow 错误。我知道当有递归调用时会发生 StackOverFlow 错误,但我编写的代码似乎不是这种情况?谁能帮忙解释为什么我会收到这个错误?
这是我的代码,我已经包含了我编写的所有构造函数,但第一个 MyArrayList() 是编译器中错误指示的那个。
public class MyArrayList<T> {
private int capacity;
private int size;
private T[] data;
**private MyArrayList<T> test;**
private T[] createArrayOfSize(int size)
{
T[] newArray = (T[]) new Object[size];
return newArray;
}
**public MyArrayList() {
this.test = new MyArrayList();
}**
public MyArrayList (int initialCapacity) {
test.data = createArrayOfSize(initialCapacity);
}
public MyArrayList(List<T> items) {
for (int i = 0; i < items.size(); i++) {
test.data[i] = items.get(i);
}
}
抱歉,格式有点蹩脚。
【问题讨论】:
-
您正在 MyArrayList 构造函数中构造一个 MyArrayList 。这意味着它将永远构造数组列表,直到堆栈不能再容纳它为止。
-
@Radnyx - 看起来是正确的。您应该将其发布为答案。
-
@user3055864 - 如果您只想要一个类的实例,请使用单例模式..
标签: java arraylist constructor