Methode eine flexible Anzahl von Parametern übergeben



  • Hallo,

    wie kann ich einer methode eine flexible Anzahl von Parametern übergeben?

    Ich hatte dabei an so etwas wie eine Liste gedacht. Die will ich aber nicht erst füllen und dann übergeben, sondern erst im methodenaufruf füllen. So in etwa:

    class X {
     X add(Object)
    ...
    }
    
    void meinemethode(X);
    
    meinemethode(new X().add(A).add(B).add(C));
    

    wenn man das so dynamisch wie z.B. bei printf (in C) hinbekommt währe ich auch zufrieden.

    Aber wichtig währe mir das es mit Klassen die im standart sind zu realisieren. Will also die Klasse X nicht selbst schreiben, auch wenn das trivial wäre. 🙂

    Gruß Mirauder Mo


  • Mod

    Was du suchst geht am Besten mit den Varargs, die aber erst mit Java 1.5 ein Teil von Java sind. Damit sieht das dann etwa so aus:

    public void blah (String... strings)
    {
       for (final String s : strings)
       {
          System.out.println (s);
       }
       System.out.println (strings.length);
    }
    

    Der Aufruf geht dann so:

    blah("Hallo","Welt");
    blah("Hallo");
    blah();
    

    Das funktioniert also letztendlich mit einem Array. Mit früheren Java-Versionen kannst du auch im Methodenaufruf ein Array erzeugen. Sooo viel Overhead ist das auch nicht.



  • 1337 H4x0r schrieb:

    Was bist du denn fürn Honk? Sich sowas einfaches selbstzuschreiben, ist das einfachste, was es gibt, also sei hier mal nicht so faul. !!!!!11111einseinseinself

    Honk, ich weis zwar nicht was genau das sein soll, aber es hört sich an wie eine Beleidigung 😡

    Das hat nichts mit faulheit zu tun, aber ich denke es ist ein beschissenes Design eine extra Klasse zu schreiben nur damit sie als Parameter übergeben wird.

    Gruß Mirauder Mo



  • Musst ja keine Klasse schreiben, sondern nur beim Methodenaufruf ein new Array übergeben. Wahrscheinlich funktionieren die varargs nicht anders.



  • Ich habe den Troll-Thread gelöscht - zur Info.



  • CengizS schrieb:

    Ich habe den Troll-Thread gelöscht - zur Info.

    Ich wusste doch irgendwas fehlt 😃

    Darf ich das so machen ?

    void meinemethode(Array a);
    ...
    String a = new ...
    Interger b = new ...
    meinemethode(new Array{a, b, ...});
    

    Das würde mich ja auch glücklich machen, ich dachte aber man müsste in die initialisierungslist compilezeit constante rein schreiben.

    Und ich hab keinen Compiler (eigentlich nur keine entwicklungsumgebung) um es zu testen und hab im inet kein Beispiel dazu gefunden.

    Gruß Mirauder Mo



  • Das 'Array' war doch jetzt nur ein Platzhalter.

    void methode(int[] manyInts)     {}
    
    // Aufruf:
    methode({0, 7, 978645, -34976});
    

    ungetestet jetzt, aber zumindest so ähnlich muss es gehen.



  • void meinemethode(Array a);
    ...
    String a = new ...
    Interger b = new ...
    meinemethode(new Array{a, b, ...});
    

    nicht ganz, aber so:

    void meinemethode(Object[] a);
    ...
    String a = new ...
    Interger b = new ...
    meinemethode(new Object[]{a, b, ...});
    


  • Danke an alle

    @destruct0r: Das ist genau das was ich gesucht habe 🙂


Anmelden zum Antworten