Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [JAVA] List contains (https://www.delphipraxis.net/157932-%5Bjava%5D-list-contains.html)

MrSpock 30. Jan 2011 13:39

[JAVA] List contains
 
Wie euch wohl auffällt, beschäftige ich mich zur Zeit mit Java. :stupid: Deshalb gleich nochmal eine Frage:

Hier findet man, zu der Methode contains folgendes:

Zitat:

contains

public boolean contains(Object o)

Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).
Dazu habe ich eine Klasse definiert, die das Interface Comparable und auch die Methode equals definiert.

Code:
public class Persons extends BeingsObject implements Comparable<Persons>{
    private String personNumber;

    public Persons(String personNumber){
        this.personNumber = personNumber;
    }

    public String getpersonNumber() {
        return this.personNumber;
    }

    @Override
    public int compareTo(Persons otherperson) {
        return personNumber.compareTo(otherperson.getpersonNumber());
    };

    public boolean equals(Persons r){
        return this.personNumber.equals(r.personNumber);
    }

}
Im Hauptprogramm habe ich ein Methode addPerson, die eine Peron erzeugt und einer ArrayList hinzufügt:

Code:
myBS.addPerson("Albert");
  myBS.addPerson("James");
  myBS.addPerson("MrSpock");
  myBS.addPerson("Hetfield");
Interessant ist jetzt die Ausgabe:

Code:
 Persons searchFor = new Persons("Albert");
  System.out.println("persList contains Albert " +myBS.PersonsList.contains(searchFor)); // gibt false zurück
  System.out.println("equal? "+myBS.PersonsList.get(0).equals(searchFor)); // gibt true zurück
Es gibt also ein Element, das die equlas Bedingung erfüllt, trotzdem gibt contains false zurück. Warum?

Phoenix 30. Jan 2011 13:50

AW: [JAVA] List contains
 
Weil die Liste wohl eher die Object-Pointer vergleicht und nicht den Wert. Ist intern wahrscheinlich nicht mit .equals() sondern mit == implementiert...

patti 30. Jan 2011 13:51

AW: [JAVA] List contains
 
Hi,

ich denke, dass das Problem an deiner Definition der equals-Methode liegt. Probier mal folgendes:

Code:
@Override
public boolean equals(Object o) {
  if (o != null && o instanceof Persons) {
    return this.personNumber.equals(((Persons)o).getpersonNumber());
  } else {
    return false;
  }
}
(ungetestet)

MrSpock 30. Jan 2011 13:58

AW: [JAVA] List contains
 
Hallo patti,

ja, so hab ich es auch schon probiert, dann funktioniert es. NetBeans gibt aber die Warnung aus:

Zitat:

Fehlende hashCode() erzeugen-Mothode erzeugen.

patti 30. Jan 2011 14:11

AW: [JAVA] List contains
 
Hm, equals() und hashCode() sind (u.a.) dazu gedacht, Objekte in einer collection gemäß den Anforderungen verwalten zu können. Sobald eine der beiden Methoden überschrieben wird, die andere jedoch nicht, scheint NetBeans diese Warnung auszugeben, um anzuzeigen, dass es zu einer Inkonsistenz kommen könnte. Wenn man sicher weiß, dass man nur Methoden der collection benutzt, die z.B. equals() aufrufen, dann kann man die Warnung wahrscheinlich sogar ignorieren (evtl. lässt sich diese Warnung auch in den Einstellungen ausschalten). Ansonsten bleibt wohl bloß übrig, die Methode hashCode() gemäß den eigenen Anforderungen ebenfalls zu überschreiben...

fkerber 30. Jan 2011 14:29

AW: [JAVA] List contains
 
Hi,

bietet NetBeans keine Möglichkeit sich diese Methoden automatisch erzeugen zu lassen?
In Eclipse kann man das sehr komfortabel machen und bei ner größeren Menge an Datenfeldern spart es viel Tipparbeit und reduziert somit auch die Fehlermöglichkeiten.


LG, Frederic

MrSpock 30. Jan 2011 14:40

AW: [JAVA] List contains
 
Habe keine Funktion gefunden, es automatisch machen zu lassen. Jetzt habe ich auch hashCode überschrieben und übergebe einfach den hashCode, den die String Klasse aus einem String erzeugen kann. Damit funktioniert nun alles und es gibt auch keine Warnung mehr.

Danke.

patti 30. Jan 2011 14:49

AW: [JAVA] List contains
 
Hier steht unter "Generating Code Using the Code Generation Dialogs" wie man mit Hilfe von NetBeans diese Methoden automatisch generieren lassen kann.

MrSpock 30. Jan 2011 17:14

AW: [JAVA] List contains
 
Hallo patti,

mein Apple hat keine INSERT Taste. Ich meine aber es ist das Menue, dass mit mit crtl+space angeboten wird. Dort konnte ich gerade die equals Methode autognerieren lassen. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz