Class als Rückgabe Parameter an eine Funktion zurück geben ...



  • ... ist so was überhaupt möglich???
    Habe folgende Szenario: Mehrere Classen besitzen gleiche Funktion und ich soll diese bei bedarf dynamisch aufrufen ...

    Habe so was probiert es funkt aber nicht – kann jemand sagen wie mache ich dass richtig!

    // Klasse 01
    class Test01 {
    
      String getText_1() {
        return “Text 01_1”;
      }
    
      String getText_2() {
        return “Text 01_2”;
      }
    }
    
    // Klasse 02
    class Test02 {
    
      String getText_1() {
        return “Text 02_1”;
      }
    
      String getText_2() {
        return “Text 02_2”;
      }
    }
    
    // Klasse ... 29
    // usw.
    
    /***********************/
    /* Funktionen aufrufen */
    /***********************/
    
      lese(new Test01());
      // und noch mal
      lese(new Test02());
      // usw...
    
    void lese( Class c ) {
      System.out.println( c.getText_1() );
      System.out.println( c.getText_2() );  
    }
    

    Danke

    Marko



  • Wenn die zurückgegebenen Texte statisch sind kannst du die Funktion als static deklarieren und dann Test01.getText_1() aufrufen. Das müsste dann auch für das gehen was du mit der Methode lese() machst.

    Bsp:
    [java]public static String getText_1() {
    return "Text 01_1";
    }[/code]



  • na ja dass ganze ist Komplizierter als das Beispiel ...

    ich muss von den Classen neue Instanzen aufrufen ...
    und da diese Classen gleiche Funktionen haben möchte ich diese Methoden nur mit einer Funktion aufrufen/ bearbeiten usw.

    ich habe immer gedacht das Java ganze Objecte also auch Fremde Classen als rückgabe Parameter an eine Funktion zueückgeben kann - oder sehe ich was falsch ...

    Marko_16



  • ich versteh Dein Problem immer noch nicht.
    Willst du eine Methode aufrufen, die in verschiedenen Klassen enthalten ist?
    (wie in deinem Beispiel angegeben)

    dann solltest du ein Interface bauen.

    also zB:

    interface Test{
      String getText_1();
      String getText_2();
    }
    
    // Klasse 01
    class Test01 implements Test{
    
      String getText_1() {
        return “Text 01_1”;
      }
    
      String getText_2() {
        return “Text 01_2”;
      }
    }
    // ...usw...
    
      lese(new Test01());
      // und noch mal
      lese(new Test02());
      // usw...
    
    void lese( Test c ) {
      System.out.println( c.getText_1() );
      System.out.println( c.getText_2() );  
    }
    

    [ Dieser Beitrag wurde am 10.03.2003 um 19:37 Uhr von Ingo aka Desert Hawk editiert. ]



  • @Marko: Ich schätze du bringst das Problem noch nicht so richtig rüber 😉


  • Mod

    Du kannst eine Klasse in Form eines Class-Objects zurückgeben. Wenn du dann noch einen parameterlosen Konstruktor in der Klasse bereitstellst, dann kannst du recht einfach eine Instanz dieser Klasse erzeugen. ...guck dir einfach mal die Methoden der Klasse Class dafür an. ...an irgendeiner Stelle wirst du dann aber wohl einige instanceof-Abfragen haben müssen.



  • Also ich denke, dass Ingo die richtige Lösung schon genannt hat. Das ist doch genau das, was Marko will! :p 🙄

    [ Dieser Beitrag wurde am 10.03.2003 um 16:40 Uhr von Pogo editiert. ]



  • @Pogo: Nein das Beispiel von Ingo ist falsch. Seine Methode lesen beherbergt einen Parameter vom Typ Class. Nichtsdestotrotz glaube ich dass es ein in der Eile entstandener Fehler ist ... wenn der Typ des Parameters nämlich Test (das Interface) wäre dann wäre alles OK 🙂

    Aber Marko will ja explizit ein Class-Objekt so wie ich das sehe



  • UPS... 😃 ... sch*** copy&paste 😉 😃
    naja habs jetzt korrigiert ^^



  • @ CengizS

    Also wie auch immer es Marko haben will, ich würde es so wie Ingo machen! 😃
    Denn seit du mir die kleine Wiederholungsstunde zu Interfaces gegeben hast, und ich endlich mal den Sinn gesehen habe, bin ich ganz vernarrt in Interfaces! 😉



  • zuerst wollte ich Parameter als Class Typ übergeben ...

    aber so wie ich sehe mit INTERFACES funkt. auch prima
    ich Danke euch!!! Ihr seid SPITZE.

    Marko_16


Anmelden zum Antworten