我创建了包含要素几何和属性的对象:
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"
所以我理解columnList
和ViewObject.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
有什么不对?
答案 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>();