Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
/ HomePage / Computer / Software / Programmierung / Schnipsel
Diese Schnippsel und Code-Beispiele beziehen sich allein auf Java
boolean String1.equals(String2)
NIE und NIMMER mit '=='
int x = String.indexOf("SearchString")
Regel: Wenn man ein Klasse selbst erstellt und diese in Collections z.B. HashMaps verwenden möchte, muss man die Methoden hashcode()
und equals()
selbst implementieren. Siehe Hashing and Cloning
Hier mal eine Idee, es über Reflections zu erledigen. Ok, Reflections sind teuer, aber bei weitem nicht so teuer, wie ein Erstellen eines neuen Objektes aus z.B. der Datenbank heraus.
/** * Berechnet den Hashcode der Klasse */ @Override public int hashCode() { // hier muss entschieden werden, ob die Superklasse ein Object ist, dann darf man super.hashCode() nicht verwenden // sonst die super.hashCode() rufen final int prime = 31; // final int prime = super.hashCode(); int result = 1; Field[] declaredFields = this.getClass().getDeclaredFields(); for (Field aField : declaredFields) { try { Object o = aField.get(this); result = prime * result + ((o == null) ? 0 : o.hashCode()); } catch (IllegalAccessException? ex) { result = prime * result; } } return result; // prime * result + super.hashCode(); } /** * Tiefer Vergleich des Objektes other mit uns selbst. */ @Override public boolean equals(Object other) { // Prüfen ob other wir selbst sind if (this == other) { return true; } if (other == null) { return false; } if (getClass() != other.getClass()) { return false; } // Auch hier, die Superkasse darf nur gerufen werden, wenn es NICHT Object ist // if (!super.equals(other)) { // return false; // } MeineKlasse? otherTO = (MeineKlasse?) other; Field[] declaredFields = this.getClass().getDeclaredFields(); for (Field aField : declaredFields) { try { Object o = aField.get(this); Object other_o = aField.get(otherTO); if (o == null) { if (other_o != null) { return false; } } else if (!o.equals(other_o)) { return false; } } catch (IllegalAccessException? ex) { return false; } } return true; }