注意:这是我进行的测试的一部分。我的目标是自己实现一个ListArray,说listarray应该能够存储任意类型的对象。我不允许使用任何其他已经存在的库类,例如LinkedList或ListArray,也不允许我放弃数组并实现Collection。我必须实现各种通用数组。
下面的代码可以编译,因此我假设构造函数可以工作。问题是当测试断言listArray [0]是否等于list.append(1)时,我得到了nullPointerException。我认为问题是我需要创建一个新的Object并将其插入到数组中,问题是我不知道Object T是什么,因此不了解如何使用以下方法创建新的T参数“元素”。
public class List<T> implements Seq<T> {
public T[] listArray;
public int size;
public int freeIndex;
public List(){
this.listArray = (T[])new Object[10];
this.size = 10;
this.freeIndex = 0;
}
//have to create a new object
public void append(T element){
this.listArray[0] = element; //need some sort of new T() method.
}
}
UPDATE我意识到append缺少功能,这就是我的意图,我只想将任意Object T插入到数组中。
UPDATE1我过于关注泛型,而错过了我的构造函数写错了。抱歉,我很抱歉,我已经尝试解决了几个小时,但是,我对Java缺乏经验。尽管如此,我还是将元素插入通用数组的问题得到了答案。谢谢。
最佳答案
如果尝试调试,则会看到this.listArray为空。
您可能对public void List()
的意图是成为构造函数,但它不是构造函数。这是普通方法。是public List()
(无返回类型)。
您绝对不需要new T() method
即可解决此问题(可能,请参见Create instance of generic type in Java?)。
最终,您很快就会发现您的append方法可以像“放在第一位置”一样工作。为了拥有完整的附加实现,您需要
更新freeIndex
如果数组太小而无法容纳新元素,则调整数组的大小
您实际上并不需要大小作为成员变量,可以依赖listArray.length。