K
KuhTee
Gast
Hallo,
also ich denke, mein Problem welches ich habe lässt sich in Java nicht vernünftig lösen (und ich werd jetzt mal nicht über Java herziehen ), aber vielleicht hat ja jemand eine gute Idee für mich.
Sachlage:
Ich habe 2 Klassen A und B, welche beide von einer Basisklasse erben, ansonsten aber keine Beziehung zueinander haben. Im konkreten Fall geht es um ListView und ChoiceBox aus JavaFx 2.0. Nun habe ich eine Klasse C geschrieben, welche von Klasse A erbt und erweiterte Funktionalität zur Verfügung stellt. Nach kurzer Zeit habe ich gemerkt "Hey, für Klasse B brauche ich genau das selbe". Und hier fängt der Ärger an: Es ist tatsächlich absolut das selbe. Ausser dem Namen der Klasse und dem Namen der Klasse von dem geerbt wird gibt es null Unterschied. In beiden Fällen werden nur Methoden aufgerufen, die in beiden Klassen identisch vorhanden sind. In meiner Naivität und von C++ verwöhnt dachte ich mir "hey, machst du einfach:"
Aber das geht ja in Java nicht.
Wichtig ist, dass die abgeleitete Klasse C wirklich auch den Typ A bzw B (oder die Elternklasse von A oder B, im konkreten Fall "Control") hat, ein einfacher Wrapper tuts also nicht.
Um es vielleicht zu veranschaulichen, so würde ich das in C++ lösen:
Den Aufruf der Methode könnte ich über Reflection lösen, das wäre auch noch ok. Bleibt noch das Problem, dass die abgeleitete Klasse C eben ein A, oder aber ein B können sein muss. Das geht so in Java nicht, ist mir klar. Hat ein Java-Crack vielleicht aber eine tricky Idee wie ich die Codeduplizierung vermeiden könnte? Im Endeffekt möchte ich einer Klasse zusätzliche Funktionalität "unterschieben", ohne die Klasse konkret kennen zu müssen.
Danke schonmal im Voraus
also ich denke, mein Problem welches ich habe lässt sich in Java nicht vernünftig lösen (und ich werd jetzt mal nicht über Java herziehen ), aber vielleicht hat ja jemand eine gute Idee für mich.
Sachlage:
Ich habe 2 Klassen A und B, welche beide von einer Basisklasse erben, ansonsten aber keine Beziehung zueinander haben. Im konkreten Fall geht es um ListView und ChoiceBox aus JavaFx 2.0. Nun habe ich eine Klasse C geschrieben, welche von Klasse A erbt und erweiterte Funktionalität zur Verfügung stellt. Nach kurzer Zeit habe ich gemerkt "Hey, für Klasse B brauche ich genau das selbe". Und hier fängt der Ärger an: Es ist tatsächlich absolut das selbe. Ausser dem Namen der Klasse und dem Namen der Klasse von dem geerbt wird gibt es null Unterschied. In beiden Fällen werden nur Methoden aufgerufen, die in beiden Klassen identisch vorhanden sind. In meiner Naivität und von C++ verwöhnt dachte ich mir "hey, machst du einfach:"
Java:
class A<T> extends T
Wichtig ist, dass die abgeleitete Klasse C wirklich auch den Typ A bzw B (oder die Elternklasse von A oder B, im konkreten Fall "Control") hat, ein einfacher Wrapper tuts also nicht.
Um es vielleicht zu veranschaulichen, so würde ich das in C++ lösen:
Code:
class A
{
public:
void doIt() { //many code here }
};
class B
{
public:
void doIt() { //other code here }
};
template<typename T>
class C : public T //C inherits T
{
public:
void run() { this->doIt(); } //call A or B
};
C<A>* c1 = new C<A>();
c1->run(); //calls A::doIt()
C<B>* c2 = new C<B>();
c2->run(); //calls B::doIt()
Den Aufruf der Methode könnte ich über Reflection lösen, das wäre auch noch ok. Bleibt noch das Problem, dass die abgeleitete Klasse C eben ein A, oder aber ein B können sein muss. Das geht so in Java nicht, ist mir klar. Hat ein Java-Crack vielleicht aber eine tricky Idee wie ich die Codeduplizierung vermeiden könnte? Im Endeffekt möchte ich einer Klasse zusätzliche Funktionalität "unterschieben", ohne die Klasse konkret kennen zu müssen.
Danke schonmal im Voraus