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. 🙂


Anmelden zum Antworten