将 Node 实现为泛型类



我最近开始学习Java,最后一件事是泛型编程和现在的链表。现在,我正在尝试将链表中的节点类实现为通用,但是遇到了一些麻烦。我正在尝试声明一个可以循环访问此链表并打印其元素的toString方法,但是每次调用link.toString()时我都会得到NullPointerException,我对为什么会收到此错误感到困惑。我知道我的toString方法的格式没有那么有效,但我试图按照我的书本说明进行操作。我正在介绍我的Node课和应用程序。

public class GenericNode<E> {
    private E data;
    private GenericNode<E> link;
    public GenericNode(E intialData, GenericNode<E> initialLink){
        data=intialData;
        link=initialLink;
    }
    public GenericNode<E> addNodeAfter( E element ) {
        link = new GenericNode<E>( element, link );
        return link;
    }
    public String toString(){

        String field1=" ";
        String field2=" ";
        String result=" ";
        if(data==null){
            field1="dummy";
            System.out.println("in dummy");
        }
        field1="Data: "+ data.toString()+ "n";
        if(link==null){
            field2="null in tail!";
            System.out.println("in tail");
        }
        field2="link: data: "+link.data.toString() ;

        if(link!=null){
            result=field1+field2+link.toString();
        }
        return field1+field2;
    }
}

public class NodeAppilication {
    public static void main(String[] args){
        GenericNode<String> head=new GenericNode<String>("Paul", null);
        GenericNode<String> tail=new GenericNode<String>("Saul",head.addNodeAfter("Saul"));
        //figure 1
        System.out.print(head.toString());
        //figure2
        tail.toString();
        GenericNode<String> dummy=new GenericNode<String>(null,head);
    }
}

您的null检查缺少else

if(data==null){
    field1="dummy";
    System.out.println("in dummy");
} else { // <<== Add an "else" here
    field1="Data: "+ data.toString()+ "n";
}
if(link==null){
    field2="null in tail!";
    System.out.println("in tail");
} else { // <<== And here...
    field2="link: data: "+link.data.toString();
}

目前,您的代码会检查null,将 field1field2 的值设置为默认值,然后立即尝试取消引用datalink,从而导致空指针异常。

最新更新