neogeo
2010-12-18, 12:12:41
Hallo!
Ich habe in Java eine generische Node Klasse, mit der man die Knoten eines Baumes darstellen kann. Generisch deswegen, weil der Schlüssel der Node von beliebigen Typen sein darf, auch wenn außer Integer und String nicht viel Sinn macht.
Jetzt bin ich an einem Punkt angelangt, an dem ich von außerhalb 2 Nodes anhand ihrer Schlüssel vergleichen will (zwecks binärem Suchbaum). also nicht nur auf Gleichheit, sondern auch größer und kleiner.
Dass die 2 generischen Schlüssel vom selben Typ sind ist eigentlich durch den Programmfluss sichergestellt, aber wie kann ich diese 2 generischen, mir also unbekannten Typen, auf größer, kleiner, gleich testen?
Habe schon versucht, die Fälle Integer und String hardcoded zu machen, d.h. mit instanceof den generischen Typ pürfen und dann casten, aber das ist irgendwie hässlich, oder?
private int compareKeys( KEY a, KEY b ) {
if(a instanceof Integer && b instanceof Integer) {
return ((Integer)a).compareTo((Integer)b);
}
// andere Typen, gleiches Verfahren
}
Wie würdet ihr das machen? Danke
Ich habe in Java eine generische Node Klasse, mit der man die Knoten eines Baumes darstellen kann. Generisch deswegen, weil der Schlüssel der Node von beliebigen Typen sein darf, auch wenn außer Integer und String nicht viel Sinn macht.
Jetzt bin ich an einem Punkt angelangt, an dem ich von außerhalb 2 Nodes anhand ihrer Schlüssel vergleichen will (zwecks binärem Suchbaum). also nicht nur auf Gleichheit, sondern auch größer und kleiner.
Dass die 2 generischen Schlüssel vom selben Typ sind ist eigentlich durch den Programmfluss sichergestellt, aber wie kann ich diese 2 generischen, mir also unbekannten Typen, auf größer, kleiner, gleich testen?
Habe schon versucht, die Fälle Integer und String hardcoded zu machen, d.h. mit instanceof den generischen Typ pürfen und dann casten, aber das ist irgendwie hässlich, oder?
private int compareKeys( KEY a, KEY b ) {
if(a instanceof Integer && b instanceof Integer) {
return ((Integer)a).compareTo((Integer)b);
}
// andere Typen, gleiches Verfahren
}
Wie würdet ihr das machen? Danke