2009-04-09 5 views
13

Il codice seguente mi sta fornendo NullPointerException. Il problema è il seguente riga:NullPointerException durante l'utilizzo del metodo put di HashMap

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

Quello che è strano è che ho eseguito questo codice senza la linea di cui sopra e la chiamata a nextLine[0] e nextLine[6] lavoro esattamente come previsto - cioè mi danno indietro elementi di una file CSV. Dichiaro e inizializzare il HashMap con il codice

HashMap<String, String> dataMap = null; 

in precedenza nel metodo

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; 
} 

risposta

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

La variabile dataMap non è inizializzata a questo punto. Dovresti ricevere un avviso sul compilatore a riguardo.

+0

Non è proprio il problema che è * esplicitamente * inizializzato? A null? –

+0

Penso che Codingscape significhi dire "non è un'istanza" –

+0

In realtà, qui c'è un suggerimento. Non ha ricevuto alcun avvertimento perché l'ha inizializzato su null per scavalcare l'avviso del compilatore che sicuramente stava ottenendo. Si dovrebbe prendere l'abitudine di NON inizializzare le variabili su un valore "Neutro" per impostazione predefinita, impostandole solo sul loro valore reale in modo che il compilatore possa avvisare. –

5

Dove si trova mappa dati inizializzata? È sempre nullo.

Per chiarire, dichiarare la variabile e impostarla su null. Ma è necessario creare un'istanza di una nuova mappa, che sia una HashMap o simile.

ad es.

datamap = new HashMap(); 

(lasciando da parte i farmaci generici, ecc)

+0

Sì, è molto strano che il dereferenziamento di un puntatore che è esplicitamente nullo genererebbe una NullPointerException. – Apocalisp

3

Datamap è dichiarata ma non inizializzata. Può essere inizializzato con

datamap = new HashMap();

1

Bene, ci sono tre oggetti a cui si accede su quella linea. Se nextLine [0] e nextLine [6] non sono nulli, poiché la chiamata println sopra ha funzionato, quindi lascia dataMap. Hai fatto dataMap = new HashMap(); somwehere?

0

Um, cosa si aspetta esattamente quando si esegue questa operazione?

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

Mi aspettavo che null fosse una specie di segnaposto, ma quando si usa put il valore "put" rende la HashMap non più uguale a null – Ankur

+0

Se put = null ovunque il mio programma si scrive da solo? –