Hallo
Ich habe eine Frage bezüglich Objekt-Orientierung
Ich leite in der GUI Schicht meines Programms einen Baum aus einem Graphen der App Schicht ab. Jeder Knoten des Baumes implementiert das Interface INode. Jeder Knoten des Graphen implementiert ICollectorNode. Da der Baum und der Graph über das Proxy Pattern verbunden sind, gilt: ICollectorNode extends INode. Ich möchte die GUI schicht entkoppelt haben, sodass sie keine Kenntnisse über das Interface ICollectorNode haben soll. Mein Problem ist wie folgt:
Ich möchte wenn ich die Methode childrenIterator auf INode aufrufe einen Iterator<INode> erhalten. Wenn ich aber auf ICollectorNode childrenIterator aufrufe einen Iterator <ICollectorNode>. D.h. wenn ich aus der GUI schicht auf die Appschicht zu greife erhalte ich INodes und wenn ich in der Appschicht intern arbeite, möchte ich ICollectorNodes erhalten. Das ganze wäre ja mit Co-Varianz gelöst. Blöderweiset unterstützt Java keine Covarianz von Generics, also z.b. List<A> ist kein SubTyp von List<B> selbst wenn A von B erbt...
Hat jemand eine Idee für eine saubere Lösung?
Grüße und Danke!!
Ich habe eine Frage bezüglich Objekt-Orientierung
Ich leite in der GUI Schicht meines Programms einen Baum aus einem Graphen der App Schicht ab. Jeder Knoten des Baumes implementiert das Interface INode. Jeder Knoten des Graphen implementiert ICollectorNode. Da der Baum und der Graph über das Proxy Pattern verbunden sind, gilt: ICollectorNode extends INode. Ich möchte die GUI schicht entkoppelt haben, sodass sie keine Kenntnisse über das Interface ICollectorNode haben soll. Mein Problem ist wie folgt:
Ich möchte wenn ich die Methode childrenIterator auf INode aufrufe einen Iterator<INode> erhalten. Wenn ich aber auf ICollectorNode childrenIterator aufrufe einen Iterator <ICollectorNode>. D.h. wenn ich aus der GUI schicht auf die Appschicht zu greife erhalte ich INodes und wenn ich in der Appschicht intern arbeite, möchte ich ICollectorNodes erhalten. Das ganze wäre ja mit Co-Varianz gelöst. Blöderweiset unterstützt Java keine Covarianz von Generics, also z.b. List<A> ist kein SubTyp von List<B> selbst wenn A von B erbt...
Hat jemand eine Idee für eine saubere Lösung?
Grüße und Danke!!