Knifflige NullPointerException

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Knifflige NullPointerException

    Hallo,
    ich habe eine NullPointerException deren Ursache ich nicht verstehe:

    Quellcode

    1. private String generateGroupConstructor(Map<List<Structure>, Integer> combinationMap) {
    2. ...
    3. Iterator<List<Structure>> iter;
    4. List<Structure> tmpList;
    5. int tmpInt;
    6. Structure tmpStructure;
    7. ...
    8. iter = combinationMap.keySet().iterator();
    9. while(iter.hasNext()) {
    10. tmpList = iter.next();
    11. tmpInt = combinationMap.get(tmpList).intValue(); // <--- An dieser Stelle gibt es eine NullPointerException
    12. tmpStructure = tmpList.get(tmpInt);
    13. ...
    14. }
    15. ...
    16. }
    Alles anzeigen


    Es kommt zu einer NullPointerException. Das Verwirrende ist, dass ich ja über die Schlüssel von combinationMap iteriere. Es MUSS also zu jedem Schlüssel einen Wert geben. Kommt die Map (ist ne HashMap) mit komplexen Objekten als Schlüssel nicht klar? Ich brauche doch nur einen Pointervergleich.

    combinationMap.get(tmpList) ist null, um genau zu sein.
    Der Value ist ebenfalls nicht null sondern ganz wie gewollt eine Integer-Instanz.
  • HA! Ich habe den Fehler gefunden. Er liegt nicht im Codeausschnitt.

    Tja, meine Map ist eine HashMap. Das heist, es wird kein Pointer verglichen, sondern der HashCode. Der Haschcode wird aus der Liste erstellt, die als Schlüssel dient. Das Problem ist aber, dass ich zu der Liste nachträglich noch etwas hinzfüge. Damit ist der Hashcode anders und der aus der neuen Liste generierte Hash-Code findet seinen Wert nicht mehr. Da muß einer drauf kommen...

    Ich werde mal schaun ob es mit ner anderen Map-Implementierung geht, oder ob ich mir was anderes einfallen lassen muss.

    Edit:
    Mit IdentityHashMap geht es.