arraylist java编译错误

时间:2012-02-27 19:46:26

标签: java arraylist

好吧我尝试在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个不同的类运行..

5 个答案:

答案 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