Erzeugung eines variablen Objektes möglich?
-
Es existieren die Klassen A,B,C.
In einer Klasse X soll in einer Methode zur Laufzeit entschieden werden, welches Objekt erzeugt und zurückgegeben wird.
( In C++ geht das glaub ich mit Templates )// Methode der Klasse X public myVariableObject create() { if (bedingung_a) return new A(); if (bedingung_b) return new B(); if (bedingung_c) return new C(); }
So ein myVariableObject kann man mit Java nicht realisieren, oder ?
MfG,
j.n.
-
Doch klar, nennt sich Factory (Pattern).
Definiere ein gemeinsames Interface und entscheide dann später welche Impl. instanziert wird.
Simon
-
Im einfachsten Fall ist der return-Typ java.lang.Object
-
Dangäää
-
CengizS schrieb:
Im einfachsten Fall ist der return-Typ java.lang.Object
Aber dann muss man ja wieder erst den Typ feststellen und danach casten.
Da ist das mit dem gemeinsamen Interface doch praktischer.
-
Klar das stimmt schon. Ich sagte ja auch nur es wäre der einfachste Fall
-
über so ein interface kann man dann auch schöööön reflektieren ;-p
-
CengizS schrieb:
Im einfachsten Fall ist der return-Typ java.lang.Object
Jeep, das war vor 1.5 Ab 1.5 gibts es die/das Generic
public class Xyz<T> { // Methode der Klasse X public T create() { /** if (bedingung_a) return (T) new A(); if (bedingung_b) return (T) new B(); if (bedingung_c) return (T) new C(); */ // Hier solltest du mit Reflectionen arbeiten // oder (die elegante Lösung) // Die Erzeugung wird in eine Factory ausgelagert. // Wobei diese auch wieder mit Refl. arbeitet } } // Falls du folgendes machen möchtest T obj ...; obj.eineMethode(); // dem Typ T eine Grundstruktur geben public class Xyz<T extends MeinInterface> { public class Xyz<T extends MeineAbstrakteKlasse> { public class Xyz<T extends MeineKlasse> { // z.B. die Klassen A, B, C implementieren das Interface "ABCInter" public class Xyz<T extends ABCInter> { // Methode der Klasse X public T create() { if (bedingung_a) return new A(); if (bedingung_b) return new B(); if (bedingung_c) return new C(); } }
-
Jo, danke.
So wie ich das sehe, wird es für mich am einfachsten sein, wenn ich meine create-Methode in drei separate aufteile und die Klasse X über meine Objekte informiere.