当尝试将变量放入Java中的对象时,Null Pointer Exception

时间:2012-12-27 09:00:02

标签: java nullpointerexception

我创建了包含要素几何和属性的对象:

public class Feature {
Feature(String wkt) {
this.wkt = wkt;
}

private HashMap<Column, String> columnMap;
private String wkt;

public String getWKT() {
return wkt;
}
public void addAttribute(Column column, String value) {
columnMap.put(column, value);
}
public String getAttribute(String column) {
return columnMap.get(column) ;
}
public Map<Column, String> getAttributes(){
    return columnMap;

}
}

Wkt是一个几何体。 ColumnMap是包含HashMap属性的对象:

public class Column {

private String columnName;

Column(String columnName) {
  this.columnName = columnName;
}

public String getName() {
  return columnName;
}
}

现在我说:

columnList = new ArrayList<Column>(columns);

......

Feature feature= new Feature(WKT);
for(int p=0;p<columnList.size();p++){
for(int k=0;k<=ViewObject.getMIDInfo(totalObjects).length;k++){
   if(p==k){
       System.out.println("Column  "+columnList.get(p).getName()+"  Value  "+ ViewObject.getMIDInfo(totalObjects)[k].toString());
      //feature.addAttribute(columnList.get(p), ViewObject.getMIDInfo(totalObjects)[k].toString());
   }
}
}

获得输出:

Column  id  Value  22
Column  kadnumm  Value  "66-41-0707001-19"

所以我理解columnListViewObject.getMIDInfo(totalObjects)并非空洞。在此之后我改变了:

//feature.addAttribute(columnList.get(p), ViewObject.getMIDInfo(totalObjects)[k].toString());

为:

feature.addAttribute(columnList.get(p), ViewObject.getMIDInfo(totalObjects)[k].toString());

得到例外:

Column  id  Value  22
java.lang.NullPointerException
at objects.Feature.addAttribute(Feature.java:18)
at objects.MIFParser.findRegion(MIFParser.java:181)
at objects.MIFParser.instanceNextObject(MIFParser.java:66)
at Read.main(Read.java:40)

我如何理解NullPointerException意味着我尝试使用空对象?什么错了?
附:对不起,我的英语很糟糕,尤其是标题。

更新

Okey我在FEature类构造函数中添加了这个:this.columnMap = new HashMap<Column, String>();

但现在我尝试做:

System.out.println(feature.getAttribute("id")+" "+feature.getAttribute("kadnumm"));

并输出:

null null

有什么不对?

5 个答案:

答案 0 :(得分:3)

你没有初始化你的columnMap:

private HashMap<Column, String> columnMap = new HashMap<Column, String>();

答案 1 :(得分:2)

addAttribute尝试在columnMap上放置内容,但您不会在任何地方创建columnMap。您需要添加到Feature构造函数:

Feature(String wkt) {
    this.wkt = wkt;
    this.columnMap = new HashMap<Column, String>(); // <=== The new bit
}

...或在声明中添加初始化:

private HashMap<Column, String> columnMap = new HashMap<Column, String>();
//                        The new bit--- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

只是声明该成员是不够的,该成员只是引用一个对象,并从null开始。您需要为其创建对象以引用并将该对象分配给它。

答案 2 :(得分:2)

创建Feature的新实例时,不会初始化columnMap对象。因此,当您在columnMap.put(column, value);

中拨打addAttribute时,它为空

答案 3 :(得分:2)

而不是

private HashMap<Column, String> columnMap;

DO

 private HashMap<Column, String> columnMap = new HashMap<Column, String>();

答案 4 :(得分:1)

您必须初始化地图:

private HashMap<Column, String> columnMap = new HashMap<Column, String>();