J
JohannisderKaeufer
Gast
Ich habe folgendes Programm
2 Klassen
2 weitere Klassen, die Methoden der ersten beiden Klassen aufrufen
und eine Klasse die das ganze Zusammenhalten soll und in der Methode foo, die entsprechenden Methoden aufruft.
Soweit so gut. Das funktioniert auch, wenn ich in der Main Methode so zusammenbaue.
Wenn ich allerdings in der Main-Methode eine AbstractClass initialisiere, dann läuft das ganze solange bis ich in der Klasse Caller2 den Typecast auf ConcreteClass durchführe. Und deshalb würde ich gerne den Typecast umgehen, sodaß ich möglichst schon zur Compilezeit diesen Fehler erhalte.
Und genau hier happert es momentan. Ich hab mir schon ein paar Sachen mit Generics überlegt, die aber irgendwie alle nicht hinhauen. Vielleicht hat noch jemand eine Idee oder einen Beweis das das nicht geht.
Edit: Ok, ich hab noch was vergessen.
Das Programm soll zuerst mit den Klassen Main, Caller1 und AbstractClass zusammenarbeiten und dann dynamisch erweitert werden können durch die Klassen Caller2 und entsprechend ConcreteClass ohne wieder an Main, Caller1 oder AbstractClass handanzulegen.
Idealierweise stelle ich mir eine Signatur für den Konstruktor von Main so oder zumindest soähnlich vor
2 Klassen
Java:
/** Abstrakte Klasse */
class AbstractClass {
void m1(){}
}
/** Erweiterung der Abstrakten Klasse */
class ConcreteClass extends AbstractClass {
void m2(){}
}
2 weitere Klassen, die Methoden der ersten beiden Klassen aufrufen
Java:
/** Ruft m1 auf */
class Caller1 implements Caller{
void call(AbstractClass c){
c.m1();
}
}
/** Ruft m2 auf */
class Caller2 implements Caller{
void call(AbstractClass c){
ConcreteClass cc = (ConcreteClass) c;
cc.m2();
}
}
und eine Klasse die das ganze Zusammenhalten soll und in der Methode foo, die entsprechenden Methoden aufruft.
Java:
class Main{
List<Caller> callers;
AbstractClass c;
public Main(List<Caller> caller, AbstractClass c){
this.caller = caller;
this.c = c;
}
void foo(){
for(Caller caller : callers){
caller.call(c);
}
}
}
Soweit so gut. Das funktioniert auch, wenn ich in der Main Methode so zusammenbaue.
Java:
public static void main(String[] args){
List<Caller> callers = new ArrayList<Caller>();
callers.add(new Caller1();
callers.add(new Caller2();
AbstractClass ac = new ConcreteClass();
new Main(callers, ac);
}
Wenn ich allerdings in der Main-Methode eine AbstractClass initialisiere, dann läuft das ganze solange bis ich in der Klasse Caller2 den Typecast auf ConcreteClass durchführe. Und deshalb würde ich gerne den Typecast umgehen, sodaß ich möglichst schon zur Compilezeit diesen Fehler erhalte.
Und genau hier happert es momentan. Ich hab mir schon ein paar Sachen mit Generics überlegt, die aber irgendwie alle nicht hinhauen. Vielleicht hat noch jemand eine Idee oder einen Beweis das das nicht geht.
Edit: Ok, ich hab noch was vergessen.
Das Programm soll zuerst mit den Klassen Main, Caller1 und AbstractClass zusammenarbeiten und dann dynamisch erweitert werden können durch die Klassen Caller2 und entsprechend ConcreteClass ohne wieder an Main, Caller1 oder AbstractClass handanzulegen.
Idealierweise stelle ich mir eine Signatur für den Konstruktor von Main so oder zumindest soähnlich vor
Java:
callers = new ArrayList<Caller<ConcreteClass>>();
new Main<ConcreteClass>(callers, new ConcreteClass);
Zuletzt bearbeitet von einem Moderator: