moin MrWurf :)
deine Erwartung war nicht unbegründet. Was hast du da für eine Liste verwendet?
Einen Vector. Ist das in irgendeiner Form ausschlaggebend?
Welche VM-Version?
1.4.2
Bist du sicher, dass actualOrder nach add(actualOrder) nicht irgendwoher neu belegt wird?
ja - ganz sicher. Ich hatte das ja testweise nur reingeschrieben und zwar direkt in der übernächsten Zeile ;) Aber ich glaube ich verstehe jetzt...
ich nehme gleich nochmal darauf Bezug.
Nun hatte ich die Vermutung, dass sich diese Objekte nicht vergleichen lassen,
Er vergleicht ja nicht die Objekte sondern die Referenzen auf diese, d.h. es wird auf Objektidentität geprüft. Das Comparable Objekte ermöglicht dagegen den Vergleich _verschiedener_ Objekte. Das ist in deinem Fall der falsche Weg.
Ha! Hier liegt der Hase im Pfeffer begraben. Die Objekte in der Liste haben ja nicht die gleichen Referenzen wie die zu vergleichenden.
Also wäre das Comparable doch der richtige Weg für mich.
Nur was habe ich bei der Umsetzung falsch gemacht? Reicht es nicht, die Klasse das Interface implementieren zu lassen (und natürlich die Mehthode auszuprogrammieren)?
Wenn die Antworten auf meine Fragen nix bringen, dann musst du ein bissel Code rausrücken.
Deine Fragen haben mir durchaus weitergeholfen, das Problem zu verstehen. Aber der Lösung bin ich dennoch nicht näher gekommen.
Hier mal ein paar Codeschnipsel, die ich für relevant halte:
1. das Erzeugen der Auftragsliste anhand der vorhanden XML-Dateien.
public List getCustomersOrders(String customerNumber) {
File custDir=new File(base,customerNumber);
List result = new Vector();
if (custDir != null && custDir.exist()) {
File[] orders = custDir.listFiles();
for (int i = 0; orders != null && i < orders.length; i++) {
if (orders[i].isDirectory()) {
File oFile = new File(orders[i], ORDERFILE);
if (oFile.exists()) {
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(oFile);
Order o = new Order(doc); //Auftragsobjekt erstellen
Job j = getJob(o);
o.setJob(j);
result.add(o); //Hier wird der Auftrag der Liste hinzugefügt
} catch (DocumentException e) {
error("DOM Error", e);
}
}
}
}
}
if (orderBy != null) {
Collections.sort(result, new OrderComparator(orderBy));
}
if (orderByDesc != null) {
Collections.sort(result, new OrderComparator(orderByDesc));
Collections.reverse(result);
}
return result; //Sortierte Liste zurückgeben
}
2. Das Zusammenstellen der Aufträge verschiedener Kunden (können doppelt vergeben sein - sollen aber freilich nur einmal angezeigt werden)
Vector result=new Vector();
... //Hier wird der Vector mit den Aufträgen gefüllt, die auf jeden Fall da sein müssen
Iterator it=store.getCustomersOrders(store.getUser().getNumber()).iterator();
while(it.hasNext()) {
Order o=(Order)it.next();
if(!result.contains(o)){ //Der Auftrag soll nur hinzugefügt werden, wenn er noch nicht vorhanden ist.
result.add(o);
}
}
3. meine compareTo-Methode aus der Klasse Order
public int compareTo(Object o) {
try {
Order order = (Order) o;
if (order.getNumber().equals(this.getNumber())){
return 0; //Objekte sind gleich
}
} catch (ClassCastException e) {
error("No order");
}
return 1; //Objekte sind nicht gleich
}
liebe Grüße aus Berlin
lina-
Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)