0

フィーチャージオメトリと属性を含むオブジェクトを作成します。

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をどのように理解するかは、空のオブジェクトを使用しようとすることを意味しますか?どうしたの?
追伸申し訳ありませんが、私の英語は特にタイトルでひどいことがあります。

アップデート

さて、これを追加します:this.columnMap = new HashMap<Column, String>();FEatureクラスコンストラクター。

しかし今、私はやろうとしています:

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

および出力:

null null

何が間違っている可能性がありますか?

4

5 に答える 5

3

columnMapを初期化しませんでした:

private HashMap<Column, String> columnMap = new HashMap<Column, String>();
于 2012-12-27T09:02:27.513 に答える
2

addAttribute何かを付けようとしcolumnMapますが、どこにも作成しませんcolumnMapFeatureコンストラクターに追加する必要があります。

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ます。参照するオブジェクトを作成し、そのオブジェクトを割り当てる必要があります。

于 2012-12-27T09:01:50.377 に答える
2

Featureの新しいインスタンスを作成するときに、columnMapオブジェクトは初期化されません。columnMap.put(column, value);したがって、電話をかけるとnullになりますaddAttribute

于 2012-12-27T09:03:59.427 に答える
2

それ以外の

private HashMap<Column, String> columnMap;

行う

 private HashMap<Column, String> columnMap = new HashMap<Column, String>();
于 2012-12-27T09:04:04.090 に答える
1

マップを初期化する必要があります。

private HashMap<Column, String> columnMap = new HashMap<Column, String>();
于 2012-12-27T09:04:37.307 に答える