ManagedProperty ApplicationScope

Diskutiere ManagedProperty ApplicationScope im Application Tier Forum; Hi zusammen Habe bis jetzt nur immer als Gast gelesen, jetzt habe ich selbst mal eine Frage. Ich implementiere gerade eine eigene GameLobby,...

  1. engeliii23
    engeliii23 Neues Mitglied
    Hi zusammen

    Habe bis jetzt nur immer als Gast gelesen, jetzt habe ich selbst mal eine Frage.

    Ich implementiere gerade eine eigene GameLobby, und jetzt ist mir aufgefallen, dass mir beim Storen der einzelnen GameRooms ein Fehler unterlaufen ist.
    Und zwar habe ich als Key einen String verwendet und als Value mein eigener GameRoom.
    Code (Java):
    private Map<String, GameRoom> gameRooms;
    Jetzt habe ich festgestellt, dass, obwohl ich den selben Key aus Copy-Past verwendet habe, beim Beitreten in einen vorhandenen GameRoom einene Fehler gibt, nämlich, dass die GameID nicht übereinstimmt.

    Ich habe auch schon eine Vermutung.. Und hoffe deshalb, dass Ihr mir einen einfacheren Weg zeigen könnt. Ich vermute, dass die HashMap den Key mit == überprüft, was zur Folge hat, dass nicht beide String-Objekte gleich sind. Denn wenn ich mir die ganze Map ausgebe und diese dann in einem TestProgramm mit equals vergleiche, dann ist alles zu 100% true. Was ich aber dann komisch finde ist, dass ich in ca. 80% der Tests durch komme, nur in 20% nicht. Wieso ist das so?

    Danke schon mal im Voraus für eure Hilfe.
     
    Zuletzt von einem Moderator bearbeitet: 17. Aug. 2012
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. faetzminator
    faetzminator Gesperrter Benutzer
    Falsch, natürlich vergleicht die [japi]HashMap[/japi] mit [c]equals()[/c] (und [c]hashCode()[/c]).
    Weil die Keys nicht übereinstimmen. Lass die mal zwischen "" ausgeben, dann siehst du auch "versteckte" Leerzeichen etc.
     
  4. Michael...
    Michael... Neues Mitglied
    Falsch vermutet: Neben dem Hash der Keys wird auf == || equals geprüft.
    Ich vermute der Fehler liegt an anderer Stelle.
     
  5. engeliii23
    engeliii23 Neues Mitglied
    Wieso sollte ich dann versteckte leerzeichen sehen?
    Achso, Tschuldigung, ich habe vergessen zu sagen, dass ich natürlich, bevor ich die Keys store, immer trimme, um eben genau die Leerzeichen etc. zu verhindern. Die Keys sind gleich, sie sind vom System generiert, der einzige unterschied ist, dass der zweite über Copy-Paste eingesetzt wird, aber auch dann funktionierts (meistens).
     
  6. engeliii23
    engeliii23 Neues Mitglied
    Okay, aber wo..? :S Ich das Ganze geschieht via Webpage (JSF 2.0), und die Strings sind ja gleich, deshalb kapiere ich das ja nicht mehr.. ich versuche jett sicher schon 2 Tage daran...
     
  7. faetzminator
    faetzminator Gesperrter Benutzer
    Genau darum will ich auf die Leerzeichen hinaus ;)
     
  8. engeliii23
    engeliii23 Neues Mitglied
    Hööh...? Kannst du mir das mal genauer erklären..? Trotz trim noch leerzeichen(wtf)?

    Okay also soll ich den token so ausgeben:
    Code (Java):
    System.out.print("\"" + token + "\"");
    Oder was....?? Und dann sollte ich z.t. leerzeichen sehen..?
     
  9. faetzminator
    faetzminator Gesperrter Benutzer
    Debugger oder Konsolenausgaben wären eine Idee, gerade wenn man noch die Keys der Map (sortiert) ausgibt. Dann kann man sich mit eigenen Augen davon überzeugen, dass die HashMap nicht lügt :)
     
  10. nillehammer
    nillehammer Guest
    Fragen wir mal anders: Welcher Teil Deines Codes (bitte ggf. posten) bringt Dich denn zu der Annahme, dass die HashMap gleiche Keys nicht erkennt?

    Falls Du damit die Möglichkeit mehrfacher puts mit selbem Key meinst, ist das kein Indiz. Es wird dabei nämlich nur der Value des Mappings ersetzt. Auch der Aufruf von get, der null zurück gibt ist kein valider Beweis, wenn die Map null als Values zulässt.

    Der einzig richtige Weg, fest zu stellen, ob ein Key in einer Map bereits vorhanden ist, ist der Aufruf von containsKey(...). Und ich bin ziemlich sicher, dass dieser bei gleichen Keys ein true zurück gibt.
     
    Zuletzt von einem Moderator bearbeitet: 16. Aug. 2012
  11. Spacerat
    Spacerat Guest
    Verwendest du etwa IdentityHashMap? Dann wär's kein Wunder, weil die vergleicht ausschliesslich mit "==". Im übrigen trägt diese Map deswegen den Namen "Hash" völlig zu unrecht würd' ich sagen.
     
Die Seite wird geladen...

ManagedProperty ApplicationScope - Ähnliche Themen

ManagedProperty wird nicht erstellt
ManagedProperty wird nicht erstellt im Forum Web Tier
SQL Datenbank-Daten in ApplicationScoped ManageBean zwischenspeichern?
SQL Datenbank-Daten in ApplicationScoped ManageBean zwischenspeichern? im Forum Web Tier
Initialisierung einer ApplicationScoped Bean
Initialisierung einer ApplicationScoped Bean im Forum Web Tier
Thema: ManagedProperty ApplicationScope