注意:这是我测试的一部分。我的目标是自己实现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缺乏功能,这就是意图,我只专注于将任意对象T插入数组。
UPDATE1 我过于专注于泛型而错过了我的构造函数被错误编写。如果它看起来很懒,我道歉,我一直试图解决这个问题几个小时但是唉,我在Java方面缺乏经验。尽管如此,我还是回答了将元素加入泛型数组的问题。谢谢。
答案 0 :(得分:1)
如果您尝试调试,您会看到this.listArray为null。
可能你对public void List()
的意图是构造函数,但它不是构造函数。这是普通的方法。是public List()
(没有返回类型)。
您绝对不需要new T() method
来解决此问题(有可能,请参阅Create instance of generic type in Java?)。
最后,您很快就会发现您的追加方法与其他“放在第一个位置”没有任何关系。为了完成追加实施,您需要
你真的不需要size作为成员变量,你可以依赖listArray.length。
答案 1 :(得分:-1)
插入
时需要增加数组索引public class List<T> implements Seq<T> {
private int incrementSize = 10;
private T[] listArray = new T[incrementSize];
private int size = 10;
private int freeIndex = 0;
public List(){
}
//have to create a new object
public void append(T element){
this.listArray[freeIndex] = element; //need some sort of new T() method.
freeIndex++;
if (freeIndex >= size) {
increaseArraySize();
}
}
private void increaseArraySize() {
// create a new array with incrementSize extra buckets
// copy old array into new array
// point old array at new array
// increment size
}
}