Comparator

Status
Nicht offen für weitere Antworten.
G

guitargod

Gast
hi!

ich hätte ein frage!

wir müssen aus einer excel- datei daten auslesen und aus diesen informationen selbstdefinierte objekte erstellen.

danach sollen wir such- und sortier-algorithmen (radix und insert) implementieren.
dazu wiederum sollen Komperatoren verwendet werden.

jetz steh ich vor einem problem:

ich versuche nun über die methode compare (vom interface java.util.comparator abgeleitet) eine ordnung über meinen objekten zu definieren.

allerdings werden dieser methode nur objekte vom typ "object" übergeben.
ich muss aber auf gewisse attribute der objekte zugreifen.

wie kann ich nun auf die akzessoren meiner selbstdefinierten objekte zugreifen?
es werden ja objekte vom typ object übergeben. über diese komme ich leider nicht an die von mir geschriebenen methoden :?

wie könnte ich das am besten anstellen, um in der klasse festzustellen um welchen datentyp es sich bei meinen objekten handelt, und wie kann ich dann auch darauf zugreifen?

ich hoffe ich konnt euch ungefähr schildern, was ich versuche :)

danke im voraus!

lg...guitargod.
 

Triebi

Aktives Mitglied
Die Prüfung mit instanceof kann hier eingespart werden. Wenn sich die Objekte wegen unterschiedlicher Klassen nicht vergleichen lassen, muss eine ClassCastException geworfen werden. Das geschieht beim Casten bei Bedarf automatisch.
 

L-ectron-X

Gesperrter Benutzer
Es ist trotzdem sauberer, das über instanceof zu prüfen. Exceptions sollten nicht geworfen werden, um den Programmfluss zu steuern, sondern sind, wie der Name schon sagt, Ausnahmefehler.
 

Triebi

Aktives Mitglied
L-ectron-X hat gesagt.:
Exceptions sollten nicht geworfen werden, um den Programmfluss zu steuern, sondern sind, wie der Name schon sagt, Ausnahmefehler.
Ich stimme dir im Prinzip zu, aber:
Code:
public class Foo implements Comparable {
    public int compareTo(Object o) {
        if (! o instanceof Foo) {
            /* Was soll hier passieren? */
        else {
            Foo f = (Foo)o;
            /* Vergleich durchführen */
        }
    }
}

public class Bar {
}

public class Test {
    public static void main(String[] args) {
        new Foo().compareTo(new Bar());
    }
}
Was soll deiner Meinung nach geschehen, wenn die if-Abfrage anschlägt? Foo und Bar lassen sich nicht vergleichen.

JavaDoc von compareTo() hat gesagt.:
Throws:
ClassCastException - if the specified object's type prevents it from being compared to this Object.
Genau dieser Fall tritt hier ein.
 

L-ectron-X

Gesperrter Benutzer
Triebi hat gesagt.:
Was soll deiner Meinung nach geschehen, wenn die if-Abfrage anschlägt? Foo und Bar lassen sich nicht vergleichen.
Nichts, deshalb braucht es doch auch gar nicht behandelt zu werden...
Code:
public class Foo implements Comparable { 
    public int compareTo(Object o) { 
        if (o instanceof Foo) { 
            Foo f = (Foo)o; 
            /* Vergleich durchführen */ 
        }
        return null;
    } 
}
 

Triebi

Aktives Mitglied
L-ectron-X hat gesagt.:
Triebi hat gesagt.:
Was soll deiner Meinung nach geschehen, wenn die if-Abfrage anschlägt? Foo und Bar lassen sich nicht vergleichen.
Nichts, deshalb braucht es doch auch gar nicht behandelt zu werden...
Code:
public class Foo implements Comparable { 
    public int compareTo(Object o) { 
        if (o instanceof Foo) { 
            Foo f = (Foo)o; 
            /* Vergleich durchführen */ 
        } 
    } 
}

Code:
$ javac Foo.java
Foo.java:7: missing return statement
    }
    ^
1 error
Und jetzt?
 

Triebi

Aktives Mitglied
Ein paar weitere Anmerkungen:

* Dass Exceptions zur Ablaufsteuerung verwendet werden, kann in diesem Fall IMHO nicht gesagt werden. Jemand versucht, zwei Objekte zu vergleichen, die gerade mal java.lang.Object als Vorfahren gemeinsam haben. Und? Selber schuld.

* Da ClassCastException ein Nachkomme von RuntimeException ist, muss sie nicht zwingend behandelt werden. Grob geschätzt würde ich sagen, dass das eher selten nötig ist.

* Ab Java 1.5 lässt sich das Problem mittels Generics noch weiter entschärfen:
Code:
public class Foo implements Comparable<Foo> {
    public int compareTo(Foo f) {
        /* Vergleich durchführen */
    }
}
Dadurch wird obiger Versuch, ein Foo- mit einem Bar-Objekt zu vergleichen, bereits vom Compiler abgelehnt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
M Comparator Java Basics - Anfänger-Themen 25
M Comparator Java Basics - Anfänger-Themen 4
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
N Comparable bzw Comparator Java Basics - Anfänger-Themen 5
J Comparator Java Basics - Anfänger-Themen 21
A Comparator Java Basics - Anfänger-Themen 4
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
V Comparator Java Basics - Anfänger-Themen 16
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
B Comparable & Comparator Java Basics - Anfänger-Themen 9
C Comparator und private Variablen Java Basics - Anfänger-Themen 7
S Comparator für Generiks Java Basics - Anfänger-Themen 6
Helgon Interface Comparator wird nicht instanziert Java Basics - Anfänger-Themen 3
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
E Comparator sortiert falsch... Java Basics - Anfänger-Themen 2
M Comparator Java Basics - Anfänger-Themen 7
B OOP Logikhilfe zum Comparator 2 Java Basics - Anfänger-Themen 12
B OOP Logikhilfe zum Comparator Java Basics - Anfänger-Themen 11
G Comparator Problem Java Basics - Anfänger-Themen 5
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
H Comparable und Comparator Java Basics - Anfänger-Themen 22
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
A JTable sortieren mit einem Comparator Java Basics - Anfänger-Themen 2
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
G Comparator- methode compare exception werfen Java Basics - Anfänger-Themen 4
B interface Comparator Java Basics - Anfänger-Themen 4
M Hilfe bei der Erstellung der Comparator Klasse Java Basics - Anfänger-Themen 10
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
G Sortieren ohne Comparator? Java Basics - Anfänger-Themen 4
S Frage zu Comparator Java Basics - Anfänger-Themen 3
G ArrayList und Comparator Java Basics - Anfänger-Themen 6
M Comparator - Sortierkriterium Java Basics - Anfänger-Themen 11
L Comparator Java Basics - Anfänger-Themen 5
T Problem mit Comparator! Java Basics - Anfänger-Themen 7
C Anstatt Spalte, Zeile mit Comparator sortieren . Java Basics - Anfänger-Themen 5
B Liste sortieren mit Comparator Java Basics - Anfänger-Themen 2
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
S JTable mit Comparator sortieren, die Frage ist wo? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
W Comparator Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben