2016-10-07 8 views
1

を更新しません、私はプライベートHashMapのフィールドを持っている(卵は列挙型で、ベーコンは、ArrayListのフィールドを持つオブジェクトです)。基本的にHashMapのフィールドは私のJavaプロジェクトで

class Foo { 
     private HashMap<Eggs, Bacon> breakfast; 

     foo() { 
     this.breakfast = new HashMap<Eggs, Bacon>();} 

     void setValues(int x) { 
      ArrayList<Integer> temp; 
      Bacon b; 
      for(int i = 0; i < x; i++) { 
      temp.add(i);} 
      b = new Bacon(temp); 
      this.breakfast.put(Eggs.Scrambled, b);} 
    } 

、私は私のTestClassをして最初のsetValuesを呼び出すことを確認しても、呼び出しは常にNullPointerExceptionがになります()またはbreakfast.sizeを()breakfast.getする:だから、のようなものです。私の実際のコードでは、forループのオブジェクトマッピングにいくつかの列挙型があります。デバッガを使用して、値が設定されたが、各ループの最後に値がすぐに消えたことがわかりました。なぜ私のHashMapフィールドに値を保存していないのか分かりません。フィールドをArrayListに変更して値を設定した場合でも、同じnullpointer/outofbounds例外が発生します。

必要に応じて実際のコードを投稿できますが、これについての洞察があれば疑問に思っていました。私はウィットの終わりです。

+1

あなたは)(setValues前のfoo()を呼び出しますか? – Jens

+1

一時は決して初期化されません。 – Jens

+0

'foo()'しようとしているのは、コンストラクタであればコンストラクタです。メソッドが 'setValues'の前に呼び出せばそれを大文字にします –

答えて

0

ArrayList<Integer> tempに値を割り当てずに宣言しました。

List<Integer> temp = new ArrayList<>(); 

は、さらに多数のコードがありますこれを回避匂い、あなたは、コーディング標準に従うようにしてみてください(私はGoogleのを好む)、このために、あなたのデザインを再考しようとする必要があります。コンストラクタとおそらく完全にリストを削除することは役に立ちますが、実際の問題やコードを知らなくても実際にはわかりません。

0

あなたのArrayListを初期化する必要があります。つまり、nullポインタ例外を引き起こすものです。

別のこととして、私の意見から地図にキーとしてenumを使用していると、HashMapはかなりのスペースを取ることになりますが、キーは限られていますが、マップを使用することはお勧めしません。列挙の各エントリのインデックスを定義し、それを使用してBaconsにアクセスします。

関連する問題