2009-08-03 18 views
0

das ist meine Sammlung, die ich machen:Warum wird hier die NullPointerException ausgelöst?

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

aber wenn ich sort-Methode aufrufen, die ich es in Test-Klasse außer Kraft setzen und auch map1 ist eine Sammlung, dass ich es in der Test-Klasse machen die Elemente denen hält, dass Ich füge der Kartensammlung hinzu, diese Ausnahme wird ausgelöst, dass es für Zeile 5 ist: 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 wird nie initialisiert. Sie können diese Art von Fehlern leicht erkennen, indem Sie beim nächsten Mal 'findbugs' auf Ihrem Code ausführen. –

Antwort

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

Es ist dein Problem. A NullPointerException wird nicht nur ausgelöst, wenn versucht wird, eine Methode auf einem null aufzurufen; Der Versuch, auf einen Index in einem Array über eine null zuzugreifen, wird denselben Effekt haben. Sie müssen das Array instanziieren, in Ihrem Fall ist dies jedoch problematisch, da Sie einen generischen Typ verwenden. Verwenden Sie einen ArrayList anstelle eines Arrays.

+0

Ich kann etwas nicht tun, das Sie oben geschrieben haben, weil dieser Fehler angezeigt wird "kann kein generisches Array von V erstellen – Johanna

+1

Verwenden Sie stattdessen eine Sammlung wie eine ArrayList . – banjollity

+0

Wie kann ich ArrayList hier verwenden? – Johanna

4

Sie haben a niemals einen Wert zugewiesen. Ganz oben tun Sie:

V[] a = null; 

aber nie danach etwas zuweisen. Also, wenn Sie tun:

a ist null, so erhalten Sie eine Nullzeiger Ausnahme.

Verwandte Themen