2009-04-09 42 views
13

Der folgende Code gibt mir eine NullPointerException. Das Problem in der folgenden Zeile ist:NullPointerException während der Verwendung von Put-Methode von HashMap

... 
dataMap.put(nextLine[0], nextLine[6]); 

Was seltsam ist, ist, dass ich diesen Code ausgeführt haben, ohne die oben genannten Zeile und den Aufruf von nextLine[0] und nextLine[6] Arbeit genau wie erwartet - das heißt, sie mich zurückgeben Elemente eines CSV-Datei. Ich erkläre und die HashMap mit dem

HashMap<String, String> dataMap = null; 

früher im Methodencode initialisieren

String[] nextLine; 
    int counter=0; 
    while (counter<40) { 
    counter++; 

    System.out.println(counter); 
    nextLine = reader.readNext(); 
    // nextLine[] is an array of values from the line 
    System.out.println(nextLine[0] + " - " + nextLine[6] +" - " + "etc..."); 
    dataMap.put(nextLine[0], nextLine[6]); 
    } 
    return dataMap; 
} 

Antwort

26
HashMap<String, String> dataMap = new HashMap<String,String>(); 

Ihre dataMap Variable wird an dieser Stelle nicht initialisiert. Sie sollten eine Compiler-Warnung erhalten.

+0

Ist das Problem nicht wirklich, dass es * explizit * initialisiert wurde? Zu null? –

+0

Ich denke, Codingscape bedeutet zu sagen "ist nicht instanziiert" –

+0

Eigentlich gibt es hier einen Hinweis. Er hat keine Warnung erhalten, weil er ihn auf Null initialisiert hat, um die Compiler-Warnung zu überschreiben, die er sicherlich bekommen würde. Sie sollten es sich zur Gewohnheit machen, Variablen nicht standardmäßig auf einen "Neutral" -Wert zu initialisieren, sondern nur auf ihren tatsächlichen Wert, damit der Compiler warnen kann. –

5

Wo ist DataMap initialisiert? Es ist immer null.

Um dies zu verdeutlichen, deklarieren Sie die Variable und setzen sie auf null. Aber Sie müssen eine neue Map instanziieren, egal ob es sich um eine HashMap oder ähnliches handelt.

z.B.

datamap = new HashMap(); 

(abgesehen von Generika etc.)

+0

Ja, es ist sehr seltsam, dass Dereferenzierung eines Zeigers, der explizit null ist, eine NullPointerException auslösen würde. – Apocalisp

3

DataMap deklariert, aber nicht initialisiert. Er kann initialisiert werden mit

datamap = new HashMap();

1

Nun, es gibt drei Objekte in dieser Zeile zugegriffen. Wenn nextLine [0] und nextLine [6] nicht null sind, weil der obige println-Aufruf funktioniert hat, bleibt dataMap übrig. Hast du dataMap = new HashMap(); Somweite?

0

Ähm, was genau do Sie erwarten, wenn Sie dies tun?

HashMap<String, String> dataMap = null; 
... 
dataMap.put(...) 
+2

Ich habe erwartet, dass Null ist eine Art Platzhalter, aber wenn Sie setzen setzen Sie den Wert wird "Put" machen die HashMap nicht mehr gleich null – Ankur

+0

Wenn put = null überall wird mein Programm selbst schreiben? –

Verwandte Themen