注意:这是我进行的测试的一部分。我的目标是自己实现一个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。

07-27 13:20