简体   繁体   中英

arraylist java compiling errors

ok i try to play with arraylist in java awhile to experiment some thing that related my project..so i come up with a simple code like this

having 3 file...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);


  }
   }

i tried to compile it and having this error

 Exception in thread "main" java.lang.NullPointerException
at DataStrucHand.addData(DataStrucHand.java:7)
at testcase1.main(testcase1.java:8)

can i know what is wrong actually? i cant even add the data...i am trying to add the data and retrieve it back by creating another testcase2.java...but than i having problems in adding now to the arraylist...my purpose is to create a temp storage to keep a specific string that can be obtain by 1 program but runs with 2 different classes..

You never assign anything to the ds field.

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;
    }
}

Try it with this line:

private ArrayList<DataStruc> ds = new ArrayList<DataStruc>();

Or, you can have a constructor that will new it up if you prefer that method:

public DataStrucHand() {
     ds = new ArrayList<DataStruc>();
}

您需要在ds放置一个ArrayList<DataStruc>实例。

You haven't instantiated the ArrayList. Write this:

public class DataStrucHand {
    private ArrayList<DataStruc> ds = new ArrayList<DataStruc>();

    public void addData(String ss){
       ds.add(new DataStruc(ss));
    }

You've never initialized ds , so it is null when you call ds.add(new DataStruc(ss)); Add a constructor to DataStrucHand that initializes ds, such as ds = new ArrayList<DataStruc>(); .

The problem is that your DataStrucHand class never initializes its private field ds , so when you try to call ds.add(...) it fails with NullPointerException .

In fact, the way the class looks right now, there is no way ds can be anything else than null .

Shortest way to fix this is to initialize ds properly:

private final List<DataStruc> ds = new ArrayList<DataStruc>();

This way each DataStrucHand instance is constructed with an ArrayList inside and ds is never null .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM