Java 在另一个方法中初始化linkedlist,空指针异常
我有一个初始化linkedList的方法,还有一个在该列表上运行递归函数的方法。但是,在这个类似的示例中,我在尝试向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){
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的原因。