Hallo,
ich habe ein Interface Interf und mehrere Klassen A, B, C, die alle dieses Interface implementieren.
In einer anderen Klasse nehme ich in einer Methode eine Instanz von Interf an und möchte mit diesem Objekt weiterarbeiten, und zwar abhängig von der eigentlichen Klasse. Mein erster Ansatz war:
Dummerweise wird bei einem Aufruf von foo immer foo(Interface i) ausgeführt:
Output: "default"
Mein nächster Ansatz funktioniert zwar, ist aber umständlich:
Gibt es da eine elegantere Lösung? Wenn neue Klassen dazu kommen, die Interf implementieren, muss man halt immer an mehreren Stellen den Code ändern.
Ich kann leider die Klassen A, B, C, und das Interface nicht ändern (sonst wäre das alles kein Problem).
ich habe ein Interface Interf und mehrere Klassen A, B, C, die alle dieses Interface implementieren.
In einer anderen Klasse nehme ich in einer Methode eine Instanz von Interf an und möchte mit diesem Objekt weiterarbeiten, und zwar abhängig von der eigentlichen Klasse. Mein erster Ansatz war:
Java:
void foo(Interf i){
//default
syso("default");
}
void foo(A a){
//do sth. with a
syso("a");
}
void foo(B b){
//do sth.with b
syso("b");
}
void foo(C c){
// do sth. with b
syso("c");
}
Dummerweise wird bei einem Aufruf von foo immer foo(Interface i) ausgeführt:
Java:
foo(new A());
Mein nächster Ansatz funktioniert zwar, ist aber umständlich:
Java:
void foo(Interface i){
if(i instanceof A)
foo((A) i);
if(i instanceof B)
foo((B) i);
if(i instanceof C)
foo((C) i);
}
void foo(A a){
//do sth. with a
syso("a");
}
void foo(B b){
//do sth.with b
syso("b");
}
void foo(C c){
// do sth. with b
syso("c");
}
Gibt es da eine elegantere Lösung? Wenn neue Klassen dazu kommen, die Interf implementieren, muss man halt immer an mehreren Stellen den Code ändern.
Ich kann leider die Klassen A, B, C, und das Interface nicht ändern (sonst wäre das alles kein Problem).