Ich fand eine Menge Post zu dem Thema, konnte aber nicht die Lösung finden, nach der ich suchte.Wie gebe ich den Rückgabetyp der Methode einer abstrakten Klasse an
So, hier ist der Deal:
Ich habe eine erste abstrakte Klasse mit zwei Unterklassen:
public abstract class A {
public A(args){..}
}
public class B extends A {
public B(args){
super(args);
}
}
public class C extends A{
public C(args){
super(args);
}
}
args einige Variablen sind aber in Form nicht ändert. Einige andere Sachen sind in den Klassen, aber es spielt hier keine Rolle.
Nun, ich habe eine andere abstrakte Klasse mit zwei Unterklassen, die Bauherren für B und C sind Der größte Teil der Erbauer ist die gleiche, also würde ich es in dem abstrakten Baumeister sein mag
public abstract class Builder {
public A build(*?*){
//compute args
return new *either B or C*(args);
}
}
public class B_Builder extends Builder {
public B build(*?*){
super(*?*);
}
}
public class C_Builder extends Builder{
public C build(*?*){
super(*?*);
}
}
Noch einmal, das andere Zeug in den Bauherren spielt keine Rolle.
Meine Frage ist, wie Sie der Builder-Klasse abastract mitteilen, wie der Rückgabetyp des Builds über die Builder-Unterklasse sein soll. Wissen, dass die Rückgabetyp B und C beide erweitert A. Ich denke, ich sollte einige allgemeine Sachen verwenden, aber ich kann es nicht schaffen, es zu arbeiten.
Kann mir jemand helfen?
Vielen Dank!
LD
Akzeptiert 'build()' irgendwelche Argumente? Wie viele Argumente haben die Konstruktoren? – shmosel
'build()' benötigt mindestens ein Argument (die Klasse, die die Daten enthält, die für den Build benötigt werden), aber es könnte auch andere haben. Der Konstruktor benötigt ungefähr 10 Argumente, die aus dem Argument von 'build()' stammen. Ihre Lösung hat den Trick übrigens, vielen Dank !!!! Ich werde auch die anderen versuchen, um ein bisschen mehr über Generika zu lernen. – ldebroux
können Sie Fabrikmuster und Uhr * Polymorphismus * handeln verwenden – emotionlessbananas