Hallo Java Comm,
ich hätte folgende Problemstellung:
Ich möchte zwei Klassen verwenden, die beide viele Gemeinsamkeiten haben. Mehrere Attribute sind syntaktisch und semantisch identisch. Beide sollen von einer anderen Klasse in einer sortierten Liste verwaltet werden, sie müssen also beide sortierbar sein.
Ich hab mir also folgendes überlegt:
- Eine (abstrakte) Oberklasse, die die gemeinsamen Merkmale beinhaltet - Abstrakt, da die gemeinsamen Teile alleine noch keinen "Sinn" ergeben, es also keine Objekte der Oberklasse geben sollte
- Comparable implementieren, da beide sortierbar sein müssen (aber auf unterschiedliche Art und Weise)
Zusammengenommen dachte ich mir, ich könnte das Comparable bereits in der Oberklasse verwenden, um anzuzeigen, daß alle Unterklassen die compareTo() Methode konkret implementieren müssen
Leider ist das so in Java nicht möglich. Gebe ich in der Oberklasse statt des <T> die Klasse "Oberklasse" an, bekomme ich Probleme, wenn ich in der UnterklasseA compareTo implementieren will; Der Compiler überprüft die Signatur und meckert, wenn ich in UnterklasseA
versuche - er erwartet ein Objekt vom Typ Oberklasse.
Ich habe bisher 2 Möglichkeiten gefunden, um das Problem zu lösen, und beide kommen mir irgendwie... holzhämmerig vor.
1)
Dann habe ich in der Unterklasse
und muss typecasten, was das Zeug hält.
2)
Löst das Problem mit der Typisierung, aber ich könnte nun Klassen von Oberklasse ableiten, die kein Comparable Interface implementieren und das möchte ich verhindern.
Gibt es noch eine elegantere Möglichkeit das um zu setzen? Oder sollte ich insgesamt umdenken?
Es handelt sich hierbei um ein Ein-Mann-Projekt mit einer sehr spezifischen Zielsetzung, aber ich möchte trotzdem so programmieren, daß auch Eventualitäten (wie eben das ableiten nur mit Implementierung von Comparable) bedacht sind.
Vielen Dank & einen angenehmen Restsonntag
Stefan
ich hätte folgende Problemstellung:
Ich möchte zwei Klassen verwenden, die beide viele Gemeinsamkeiten haben. Mehrere Attribute sind syntaktisch und semantisch identisch. Beide sollen von einer anderen Klasse in einer sortierten Liste verwaltet werden, sie müssen also beide sortierbar sein.
Ich hab mir also folgendes überlegt:
- Eine (abstrakte) Oberklasse, die die gemeinsamen Merkmale beinhaltet - Abstrakt, da die gemeinsamen Teile alleine noch keinen "Sinn" ergeben, es also keine Objekte der Oberklasse geben sollte
- Comparable implementieren, da beide sortierbar sein müssen (aber auf unterschiedliche Art und Weise)
Zusammengenommen dachte ich mir, ich könnte das Comparable bereits in der Oberklasse verwenden, um anzuzeigen, daß alle Unterklassen die compareTo() Methode konkret implementieren müssen
Java:
public abstract Oberklasse implements Comparable<Oberklasse>
Java:
public UnterklasseA extends Oberklasse
Java:
public UnterklasseB extends Oberklasse
Leider ist das so in Java nicht möglich. Gebe ich in der Oberklasse statt des <T> die Klasse "Oberklasse" an, bekomme ich Probleme, wenn ich in der UnterklasseA compareTo implementieren will; Der Compiler überprüft die Signatur und meckert, wenn ich in UnterklasseA
Java:
public int compareTo(UnterklasseA zuvergleichendesObjekt)
Ich habe bisher 2 Möglichkeiten gefunden, um das Problem zu lösen, und beide kommen mir irgendwie... holzhämmerig vor.
1)
Java:
public abstract Oberklasse implements Comparable<Object>
Java:
public int compareTo(Object zuvergleichendesObjekt)
2)
Java:
public abstract Oberklasse
public UnterklasseA extends Oberklasse implements Comparable<UnterklasseA>
public UnterklasseB extends Oberklasse implements Comparable<UnterklasseB>
Gibt es noch eine elegantere Möglichkeit das um zu setzen? Oder sollte ich insgesamt umdenken?
Es handelt sich hierbei um ein Ein-Mann-Projekt mit einer sehr spezifischen Zielsetzung, aber ich möchte trotzdem so programmieren, daß auch Eventualitäten (wie eben das ableiten nur mit Implementierung von Comparable) bedacht sind.
Vielen Dank & einen angenehmen Restsonntag
Stefan