2009-08-03 13 views
0

これは私が作る私のコレクションです:なぜNullPointerExceptionがスローされるのですか?

Test<v> map = new Test<V>(); 

が、私は、私はテストクラスでそれをオーバーライドしてもMAP1は意志がその要素を保持し、私はテストクラスでそれを作る1つのコレクションですsortメソッドを呼び出します私はマップコレクションに追加します。この例外は、行5のためにスローされます:a [i] = map.get(new Integer(i));

V[] a = null; 
    public void sort() { 
    V temp = null; 

    for (int i = 0; i < map1.size(); i++) { 

     a[i] = map1.get(new Integer(i)); 

     if (a[i].getName().hashCode() > a[i + 1].getName().hashCode()) 
      temp = a[i]; 
     a[i] = a[i + 1]; 
     a[i + 1] = temp; 

    } 
+0

V [] aは決して初期化されません。あなたは、次回にあなたのコードで 'findbugs'を実行することによって、これらのタイプのエラーを簡単にキャッチすることができます。 –

答えて

10
V[] a = null; 
... 
a[i] = ... 

あなたの問題があります。 nullのメソッドを呼び出そうとすると、NullPointerExceptionがスローされるだけでなく、配列内のインデックスにnullでアクセスしようとすると、同じ効果があります。あなたはジェネリック型を使用しているので、あなたのケースではこれは問題になりますが、配列をインスタンス化する必要があります。配列の代わりにArrayListを使用してください。

+0

このエラーが表示されるため、上に書いたことはできません "V – Johanna

+1

の代わりにArrayList などのコレクションを使用することはできません。 – banjollity

+0

ここでArrayList を使用するにはどうすればいいですか? – Johanna

4

あなたはaに値を割り当てられません。一番上には、

V[] a = null; 

がありますが、それ以降は決して割り当てられません。したがって、あなたが行うとき:

a[i] = ... 

aはnullポインタ例外を取得します。

関連する問題