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

时间:2014-04-26 05:49:01

标签: java

我有一个方法来初始化一个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"));

    }
  }

3 个答案:

答案 0 :(得分:2)

您正在方法中初始化本地链接列表,而不是类的成员。即使在方法调用之后,resultList仍然为null,因为它从未初始化。将代码更改为以下...

 private LinkedList<T> resultList; 

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

P.S。 :请参考@ JB的评论以获得更好的设计。

答案 1 :(得分:1)

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

您没有初始化实例字段。而是做

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

或为了更好的可读性

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

答案 2 :(得分:0)

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

您的设计需要清楚它是否只是一个列表,它是通过传递来改变的,或者类实例是否包含列表&amp;变了。

拨打new Bla<String>().experiment("A")只需修改&amp;返回一个本地列表,但您似乎试图将&#34; Builder&#34;基于此的语义。