好吧我尝试在java中玩arraylist一段时间来试验一些与我的项目相关的事情。所以我想出了一个像这样的简单代码
有3个文件... DataStruc.java,DataStrucHand.java,testcase1.java
DataStruc.java
public class DataStruc {
private String testString;
public DataStruc(String s){
this.testString = s;
}
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
public String toString(){
return String.format("%s",testString);
}
}
DataStrucHand.java
import java.util.ArrayList;
public class DataStrucHand {
private ArrayList<DataStruc> ds;
public void addData(String ss){
ds.add(new DataStruc(ss));
}
public ArrayList<DataStruc> getData(){
return ds;
}
}
testcase1.java
import java.util.*;
public class testcase1 {
public static void main(String args []){
DataStrucHand dsh = new DataStrucHand();
String gdata = "test";
dsh.addData(gdata);
}
}
我试图编译它并出现此错误
Exception in thread "main" java.lang.NullPointerException
at DataStrucHand.addData(DataStrucHand.java:7)
at testcase1.main(testcase1.java:8)
我能知道实际上有什么问题吗?我甚至无法添加数据...我正在尝试添加数据并通过创建另一个testcase2.java来检索它...但是我现在在向arraylist添加时遇到问题......我的目的是创建一个临时数据库存储以保留一个特定的字符串,该字符串可以通过1个程序获得,但可以使用2个不同的类运行..
答案 0 :(得分:2)
您永远不会向ds
字段分配任何内容。
DataStrucHand.java
import java.util.ArrayList;
public class DataStrucHand {
private ArrayList<DataStruc> ds; //I am null because nothing is ever new'd up here...
public void addData(String ss){
ds.add(new DataStruc(ss));
}
public ArrayList<DataStruc> getData(){
return ds;
}
}
尝试使用此行:
private ArrayList<DataStruc> ds = new ArrayList<DataStruc>();
或者,你可以有一个构造函数,如果你喜欢这个方法,它将会新建它:
public DataStrucHand() {
ds = new ArrayList<DataStruc>();
}
答案 1 :(得分:0)
您需要在ArrayList<DataStruc>
中添加ds
个实例。
答案 2 :(得分:0)
您尚未实例化ArrayList。写下这个:
public class DataStrucHand {
private ArrayList<DataStruc> ds = new ArrayList<DataStruc>();
public void addData(String ss){
ds.add(new DataStruc(ss));
}
答案 3 :(得分:0)
您从未初始化ds
,因此当您致电ds.add(new DataStruc(ss));
时,它会为空。将构造函数添加到初始化ds的DataStrucHand
,例如ds = new ArrayList<DataStruc>();
。
答案 4 :(得分:0)
问题是,您的DataStrucHand
类从未初始化其私有字段ds
,因此当您尝试拨打ds.add(...)
时,它会失败并显示NullPointerException
。
事实上,正如班级目前所看到的那样,ds
除了null
之外别无他法。
解决此问题的最简单方法是正确初始化ds
:
private final List<DataStruc> ds = new ArrayList<DataStruc>();
这样,每个DataStrucHand
实例的内部都会ArrayList
,而ds
永远不会null
。