Java 在另一个方法中初始化linkedlist,空指针异常

Java 在另一个方法中初始化linkedlist,空指针异常,java,Java,我有一个初始化linkedList的方法,还有一个在该列表上运行递归函数的方法。但是,在这个类似的示例中,我在尝试向linkedlist添加顶点时出错 import java.io.*; import java.util.*; public class Bla<T>{ private LinkedList<T> resultList; public LinkedList<T> experiment(T vertex){

我有一个初始化linkedList的方法,还有一个在该列表上运行递归函数的方法。但是,在这个类似的示例中,我在尝试向linkedlist添加顶点时出错

  import java.io.*;
  import java.util.*;

  public class Bla<T>{

    private LinkedList<T> resultList; 

    public LinkedList<T> experiment(T vertex){
       LinkedList<T> resultList = new LinkedList<T>();
       return experimentRecursive(vertex);
    }

    public LinkedList<T> experimentRecursive(T vertex){
       resultList.add(vertex);  
       return resultList;
    }

   public static void main (String args[]){

     Bla <String> hello= new Bla<String>();
     System.out.println(hello.experiment("A"));

    }
  }
import java.io.*;
导入java.util.*;
公共类Bla{
私有链接列表结果列表;
公共链接列表实验(T顶点){
LinkedList resultList=新建LinkedList();
返回(顶点);
}
公共链接列表(T顶点){
结果列表。添加(顶点);
返回结果列表;
}
公共静态void main(字符串参数[]){
Bla hello=新Bla();
System.out.println(hello.experiment(“A”));
}
}

您正在初始化方法中的本地链表,而不是类的成员
resultList
即使在方法调用之后仍然保持空值,因为它从未初始化过。将代码更改为以下内容

 private LinkedList<T> resultList; 

 public LinkedList<T> experiment(T vertex){
    resultList = new LinkedList<T>();
    return experimentRecursive(vertex);
 }
私有链接列表结果列表;
公共链接列表实验(T顶点){
resultList=新建LinkedList();
返回(顶点);
}

注意:请参考@JB的意见,以获得更好的设计。

错误引用局部变量,而不是字段

您的设计需要弄清楚它是否只是一个通过传递而改变的列表,或者类实例是否包装了列表并改变了它

调用
new Bla().experiment(“A”)
可能只是修改并返回一个本地列表,但您似乎试图将“Builder”语义置于此之上。

public LinkedList<T> experiment(T vertex){
   LinkedList<T> resultList = new LinkedList<T>();
   return experimentRecursive(vertex);
}
公共链接列表实验(T顶点){
LinkedList resultList=新建LinkedList();
返回(顶点);
}
您没有初始化实例字段。取而代之的是

public LinkedList<T> experiment(T vertex){
    resultList = new LinkedList<T>();
    return experimentRecursive(vertex);
}
公共链接列表实验(T顶点){
resultList=新建LinkedList();
返回(顶点);
}
或者为了更好的可读性

this.resultList = new LinkedList<T>();
this.resultList=newlinkedlist();

错误是什么?阅读并发布其堆栈跟踪如何?您的
私有LinkedList结果列表从未初始化。+1。请注意,让一个公共方法初始化成员字段,而另一个公共方法假设该字段已初始化,这是一种糟糕的设计。该字段应该由构造函数初始化。是的,我同意:),但如果可能的话,解决方案不应该更改OP的代码,所以这就是在方法中初始化linkedlist的原因。