Java NullPointerException/类型泛型问题

Java NullPointerException/类型泛型问题,java,list,generics,nullpointerexception,immutability,Java,List,Generics,Nullpointerexception,Immutability,我用Java从头创建了一个链表类。目标是使这个链表类不可变。我正在使用泛型类型(问题的可疑部分)。该类有三个属性: boolean isEmpty; T data; LinkedListClass<T> next; 我认为引发NullPointerException是因为在创建LinkedListClass时,它的两个值为null。因此,当尝试更改或引用它们时,会引发异常。我考虑过的一种解决方法是将publicLinkedListClass构造函数中的null替换为int值0。然而

我用Java从头创建了一个链表类。目标是使这个链表类不可变。我正在使用泛型类型(问题的可疑部分)。该类有三个属性:

boolean isEmpty;
T data;
LinkedListClass<T> next;

我认为引发NullPointerException是因为在创建
LinkedListClass
时,它的两个值为null。因此,当尝试更改或引用它们时,会引发异常。我考虑过的一种解决方法是将public
LinkedListClass
构造函数中的null替换为int值0。然而,我的IDE抱怨预期的类型是T,但我为它提供了一个int。因此我认为这可能是一个关于类型泛型的问题。

您的公共构造函数有问题。应该是这样的:

public LinkedListClass() {
     this(true, null, null);
}
在这一行

LinkedListClass<T> newList = new LinkedListClass<T>(true, null, null);
LinkedListClass newList=newLinkedListClass(true,null,null);

您根本不设置参数,而是创建了一个新变量,以后不再使用。因此,
isEmpty
有一个默认值(
false
)。阅读有关构造函数重载的更多信息。

什么语义具有
isEmpty
?这是否意味着
数据
为“空”(null?),或者链表没有更多节点?为什么链表中的每个元素都有一个
isEmpty
标志?我知道这可能与您的问题无关。问题在于,您的实现在某种程度上是akward,而我认为在所有其他内容保持不变的情况下,仅修复特定的空指针问题没有多大用处。您向我们展示的代码中出现空指针异常的唯一可能原因是
this。调用
copyrist
时,next
为空。
 public LinkedListClass<T> copyList() {

    LinkedListClass<T> clonedList = new LinkedListClass<T>();

    if(this.isEmpty) {

        return clonedList;
    }

    clonedList = new LinkedListClass<T>(false, this.data, this.next.copyList() ); //this is line 32


    return clonedList;


}
public class prog7 {

public static void main (String args[]) {

    LinkedListClass<Integer> list1 = new LinkedListClass();
    LinkedListClass<Integer> list2 = new LinkedListClass();
    list2 = list1.copyList();                                 //this is line 7

}
Exception in thread "main" java.lang.NullPointerException
at LinkedListClass.copyList(LinkedListClass.java:32)
at prog7.main(prog7.java:7)
public LinkedListClass() {
     this(true, null, null);
}
LinkedListClass<T> newList = new LinkedListClass<T>(true, null, null);