[JAVA] Object uit HashMap is null

Pagina: 1
Acties:

  • Blubber
  • Registratie: Mei 2000
  • Niet online
Ik heb een probleem :). Ik heb een HashMap die ik vul met als key een Contact object en als value een ChatWindow object.

code:
1
2
3
Contact c = theMsnAdmin.getContactByName (username);
ChatWindow w = new ChatWindow (c, this);
sessions.put(c, w);


sessions is een HashMap die als instance var is gedeclareerd. Als ik verderop van hetvolgende doe:

code:
1
2
ChatWindow c = (ChatWindow)sessions.get(contact);
System.out.println(c);


Dan geeft ie aan dan c null is. Terwijl als ik bij het bovenste stukje code tjek of Chatwindow w geen null is dan geeft ie keurig allerlei rotzooi terug, met andere woorden die w wordt echt in de map gezet... Wat doe ik hier fout?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dan is blijkbaar je contact niet hetzelfde als de c die je als key gebruikt

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dit ziet er allemaal goed uit, doe anders even:
sessions.put(c, w);
System.out.println(session.get(c));

[edit]
of is Sessions echt een hashmap en niet een hashmap wrapper?

  • Blubber
  • Registratie: Mei 2000
  • Niet online
rwb schreef op 14 augustus 2002 @ 15:00:
Dan is blijkbaar je contact niet hetzelfde als de c die je als key gebruikt
dom... dat ik daar zelf niet aan dacht, meteen ff proberen of dat het is. Ik ging er van uit dat die wel goed was :(

Jep je had gelijk, het zijn verschillende Contact objecten. Ik ga maar eens wat langer slapen vanacht denk ik :P

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je hebt dus 2 objecten voor 1 entiteit. Je kan dit oplossen door een goeie hashcode te implementeren (en natuurlijk de equals te overriden). Maar dit is nog een gammele constructie omdat een wijziging bij 1 object niet een wijziging bij het andere object tot gevolg heeft en je kan verder zelf nagaan wat voor problemen dit gaat opleveren.

Je kan beter ervoor zorgen dat niemand afgezien van een 'contact factory' contacts mag aanmaken. Je zegt dat je een contact wil hebben voor een bepaalde sleutel, en als die contact nog niet is gemaakt dan maakt de contactmananger die aan, plaatst hem in de map en stuurt die waarde terug. Of als de contact wel gevonden is kan je die waarde terug sturen.