gpt4 book ai didi

java - 将类型 T 的对象插入通用列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:28 26 4
gpt4 key购买 nike

注意:这是我进行的测试的一部分。目标是自己实现一个ListArray,说listarray应该能够存储任意类型的对象。我不允许使用任何其他库类,例如已经存在的 LinkedList 或 ListArray,并且不允许我放弃数组并实现 Collection。我必须实现一个通用的数组。

下面的代码可以编译,所以我假设构造函数可以工作。问题是,当测试断言 listArray[0] 是否等于 list.append(1) 时,我得到一个 nullPointerException。我认为问题是我需要创建一个新对象并将其插入到数组中,问题是我不知道对象 T 是什么,因此不明白如何使用参数“element”创建一个新 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.
}
}

更新我意识到append缺乏功能,这就是目的,我只专注于将任意对象T插入到数组中。

UPDATE1 我过于关注泛型,而忽略了我的构造函数编写错误。如果它看起来很懒,我很抱歉,我已经尝试解决这个问题几个小时了,但可惜的是,我对 Java 缺乏经验。尽管如此,我还是得到了将元素插入通用数组的问题的答案。谢谢。

最佳答案

如果您尝试调试,您​​会看到 this.listArray 为 null。也许您对 public void List() 的意图是成为构造函数,但它不是构造函数。这是普通方法。是 public List() (无返回类型)。

你绝对不需要new T()方法来解决这个问题(这是可能的,参见Create instance of generic type in Java?)。

最后,您很快就会发现您的追加方法的工作方式与“放在第一位”没有任何区别。为了完成附加实现,您需要

  • 更新 freeIndex
  • 如果数组太小而无法容纳新元素,则调整数组大小

您实际上并不需要 size 作为成员变量,您可以依靠 listArray.length。

关于java - 将类型 T 的对象插入通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com