1

グローバルに使用できるバッキングBeanで変更可能なマップを作成しようとしています。これが私がそれをどのように使用しているかです:

private Map<Object, Date> myMap;

public void myMethod(){
      getMyMap().put(myObject, myDate);
    //I have also tried the following with the same results:
    //myMap.put(myObject, myDate);
}

//setter
public void setMyMap(Map<Object, Date> myMap) {
      this.myMap= myMap;
}

//getter
public Map<Object, Date> getMyMap() {
    return myMap;
}

myMapのセッターとゲッターは、使用しているプログラムから自動的に生成されます(自動生成されて、他のすべての機能を設定して取得します)。

マップにデータを入力しようとすると、エラーが発生します。nullポインタ例外を返します。コードは明らかに単純化されていますが、さらに情報が必要な場合は、喜んで提供します。

私の問題は、以下を使用することで解決されました。

    private Map<Object, Date> myMap = new HashMap<Object, Date>();

public void myMethod(){
    myMap.put(myObject, myDate);
}

誰かアドバイスがあれば、喜んで聞いてみます。

4

4 に答える 4

4

私はあなたがここに設計上の欠陥を持っていることをほぼ確信しています。のゲッターとセッターを提供することは非常にまれmapです。おそらく、コンストラクター引数として取り、代わりにメソッドをmap公開する必要があります。これにより、たとえばこのエラーの可能性がクリーンアップされます。putget

于 2013-01-08T21:15:47.777 に答える
3

setMyMapそれが呼び出されると確信していますか?そうでないかのようmyMapnull、それは慣れたときになります。

マップに「デフォルト」値を持たせたい場合は、次のように初期化する必要があります。

private Map<Object, Date> myMap = new HashMap<Object, Date>();
于 2013-01-08T21:14:24.600 に答える
0
private Map<Object, Date> myMap;

myMapを指しているのでnull

1)mmapを更新する前にsetMyMapを実行する必要があります

(また)

2)マップ宣言をに変更します

private Map<Object, Date> myMap = new HashMap<Object, Date>();
于 2013-01-08T21:13:57.433 に答える
0

setMyMap(newMap) を使用して設定するまで、変数 myMap は null になります。

于 2013-01-08T21:14:44.923 に答える