Methoden Unterschiedliche viele Parameter

G

GaTzahags

Gast
Hallo,

ich suche wie man mehrere Eingabeparameter der Methode übergeben kann.
Dabei steht vorher nicht die Anzahl der übergebenen Parameter fest.
--------------------------------------------------------------------------
Man könnte zwar einen Array übergeben, aber ich möchte gerne wissen wie es mit dieser Methode auch geht.


Vor einiger Zeit habe ich mal irgendwo gesehen, dass man es mit "String ...," oder so machen kann.

Java:
public void methode(String ..., )

Wie war noch mal der korrekte Ausdruck?
 

TMM

Mitglied
Hallo zusammen,

sorry, dass ich hier poste, aber ich habe seit dem letzten Log-In paar technische Probleme, inkl. die Erstellung eines neuen Thema:(

Meine Frage bezieht sich auch auf varargs. Und zwar sollen wir in einer Aufgabe im Konstruktor varargs verwenden und die vom Nutzer eingegebenen Argumenten in einem Array speichern.
Das wäre kein Problem, wenn es nicht explizit VERBOTEN wäre ein Array als ARGUMENT zu übergeben.
Wie geht man in diesem Fall vor?
Ich habe mir überlegt, die als varargs übergebenen Objekte zu zählen und dann in ein Array schon im Konstruktor-Rumpf zu speichern. Habe aber keine Idee, wie man hier das (Zählen von Argumenten) Syntaktisch realisieren kann.

Oder gibt's einen anderen etablierten Ansatz dafür?

Schon mal vielen Dank!

VG
 

Timothy Truckle

Top Contributor
Und zwar sollen wir in einer Aufgabe im Konstruktor varargs verwenden und die vom Nutzer eingegebenen Argumenten in einem Array speichern.
Das widerspricht sich,
Code:
Varargs
sind Arrays:
Java:
void varargMethod(String ... stringVaragParameter){
   String[] localVar = stringVaragParameter;
}

bye
TT
 

TMM

Mitglied
Hallo Timothy,

ich hatte so verstanden, dass bei (String[] args) ein Array übergeben wird und bei (String ... args) die Argumenten einzeln...
:(

Wie sollte man dann eine beliebige Anzahl von Argumenten einem Konstruktor übergeben, ohne Arrays zu nutzen?

Wirklich habe keine Idee...:(((
 

Timothy Truckle

Top Contributor
Wie sollte man dann eine beliebige Anzahl von Argumenten einem Konstruktor übergeben, ohne Arrays zu nutzen?
Java:
/* Konstruktor */ Klasse(String... varArg) { 
   // varArg verarbeiten
}


public static void main(String[] agrs){
 new Klasse("Test");
 new Klasse("Test","Test1");
 new Klasse("Test","Test1","Test2");
}
Prinzip verstanden?

bye
TT
 
S

Spacerat

Gast
Das Ganze ist doch recht Einfach. Bei VarArgs wird das Array durch die JVM vor dem Eintritt in die Methode aus den Argumenten gebildet. Innerhalb des Methodenrumpfes ist es halt ein Array. Es tut keinem weh, wenn man statt
Java:
public static void main(String[] args)
Java:
public static void main(String ... args)
schreibt. Aber man kann ja mal versuchen, die gewohnte Form der "main"-Methode mit variablen Parametern aufzurufen. Das geht nicht gut und genau so verhalten sich dann auch andere Methoden. Vor VarArgs (also pre 1.5) war man z.B. bei "String.format()" und anderen ein Array zu übergeben, welches man zuvor selbst erstellen durfte. Das macht nun seit Java1.5 die JVM für uns. VarArgs sind also zunächst erst mal keine Arrays, sondern beeinflussen nur die Arten, wie die Methode aufgerufen werden kann. Erwartet sie ein Array, kann man variable Parameter vergessen. Erwartet sie hingegen VarArgs, kann man sogar, wie gewohnt, ein Array übergeben oder aber halt einzelne Parameter.
Es gibt manchmal Konstrukte (z.B. CommandPattern), wo diverse Subklassen verschiedene Anzahl an Parametern brauchen. Die Superklasse (Command) definiert dann eine Methode
Java:
class Command {
  public Object execute(Object ... args) throws Throwable {
    // no implementation
  }
}
und konkrete Klassen überschreiben diese mit Typen und Anzahl der benötigten Argumente.
Java:
class Load extends Command {
  public File execute(String path) {
    // load
    throw new FileNotFoundException(path);
  }

  @Override
  public Object execute(Object ... args) throws Throwable {
    checkParameter(); // wirft ggf. Exception
    return execute((String) args[0]);
  }
}
In einer Engine lässt sich aus einer Command-Liste dann definitiv immer "<Command>.execute()" aufrufen[STRIKE] und wenn die Parameter passen (in diesem Fall String), wählt die JVM die passende Methode[/STRIKE] und die konkrete Klasse prüft die Parameter und ruft dann ihrerseits die korrekte Methode auf. Für deinen Fall wär's natürlich umgekehrt, die VarArgs-Methode müsste protegiert werden, damit sie von aussen nicht erreichbar ist. Die Aufrufe finden dann umgekehrt statt. Aber irgendwie fehlt mir ein Anwendungsfall dazu.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Es wird der Methode ja auch kein Array "übergeben", sondern einzelne Argumente. Dass auf diese dann als Array zugegriffen werden kann, ist ein ganz anderes Paar Schuhe (und so sieht es anscheinend auch der Aufgabensteller).
 
S

Spacerat

Gast
Bitte durch "Compiler" ersetzen. Varargs sind nichts anderes als syntaktischer Zucker. Zur Kompilierzeit "werden" der Formalparameter und die Aktualparameter jeweils ein Array. Im Bytecode sind Varargs von Arrays nur durch das method property flag [c]ACC_VARARGS[/c] zu unterscheiden.
Ach echt? Gut zu wissen. Naja, zum Ersetzen ist's trotzdem zu spät.
 

TMM

Mitglied
Vor allem vielen Dank an alle.

Es wird der Methode ja auch kein Array "übergeben", sondern einzelne Argumente. Dass auf diese dann als Array zugegriffen werden kann, ist ein ganz anderes Paar Schuhe (und so sieht es anscheinend auch der Aufgabensteller).

@Spacerat: so habe ich das Prinzip auch verstanden, dass die einzelnen Argumenten, die der Methode übergeben werden,
durch "interne Magie":) (sorry, ich weiß (NOCH) nicht, welche Prozesse danach ablaufen) in einem Array "abgelegt" werden.

Die Frage ist, wie kann ich im Rumpf der Methode oder im Konstruktor (in meinem Fall) diese Argumente, die als varargs übergeben werden in einem vorgegebenen Array speichern?
Sprich, mit den Elementen eines Arrays, der als Argument übergeben wird, wäre das so:

Java:
MeinKonstruktor(int [] elemente){
                     int [] meinArray = new int[elemente.length];
                     for (int i=0; i<elemente.length; i++){
                            meinArray[i]=elemente[i];
                     }
            }

Meine Frage ist, wie mache ich das, wenn ich statt eines Arrays die einzelnen Argumente habe?
Java:
MeinKonstruktor(int [] elemente){
                     int [] meinArray = new int[elemente.length];
                     for (int i=0; i<elemente.length; i++){
                            meinArray[i]=?????????;//das geht doch nicht oder?
                     }
            }
 
S

Spacerat

Gast
Die Antwort ist einfacher als du denkst... die da lautet: Genau so. Das ist ja der Geck. Der VarArgs-Operator ist nur für den Aufrufer wichtig, damit er weis, diese Methode will variable Argumente oder ein Array.
Innerhalb der Methode kannst du VarArgs ignorieren (Die 3 Punkte evtl. mit Tippex übermalen und 2 eckige Klammern drauf pinseln, nur den Quelltext darfst du nicht ändern. ;)) und die variable als Array verwenden. Kurz: "????????" durch "elemente" ersetzen.
 

Timothy Truckle

Top Contributor
Die Frage ist, wie kann ich im Rumpf der Methode oder im Konstruktor (in meinem Fall) diese Argumente, die als varargs übergeben werden in einem vorgegebenen Array speichern?
Oder so wie ich es schon vor gemacht hatte:
Java:
void varargMethod(String ... stringVaragParameter){
   String[] localVar = stringVaragParameter;
}

bye
TT
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
P Berechnungen: unterschiedliche Rundungsfehler bei Long? Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
J unterschiedliche Dateiformate verarbeiten Allgemeine Java-Themen 7
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
A TXT File einlesen unterschiedliche Zeilenlänge Allgemeine Java-Themen 9
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
GianaSisters Klassen Unterschiedliche Zeiten bei DATE Allgemeine Java-Themen 6
G Input/Output URLDecoder.decode - Unterschiedliche Ergebnisse Windows / Linux Allgemeine Java-Themen 2
A md5 liefert unterschiedliche Testsummen? Allgemeine Java-Themen 4
M Unterschiedliche Java-Versionen Allgemeine Java-Themen 5
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
S Zugriff auf unterschiedliche JREs Allgemeine Java-Themen 7
G Abstrakte Fabrik für unterschiedliche Signaturen? Allgemeine Java-Themen 7
L unterschiedliche Größe beim serialisieren eines Objektes! Allgemeine Java-Themen 6
W Unvollständige und unterschiedliche CharSets Allgemeine Java-Themen 3
L Unterschiedliche mails (Daten aus JTable) schicken Allgemeine Java-Themen 14
U Transparent Buttons - unterschiedliche Java-Versionen Allgemeine Java-Themen 8
M unterschiedliche Betriebssysteme abfangen Allgemeine Java-Themen 3
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
Tacofan Hangman so viele Labels wie Buchstaben Allgemeine Java-Themen 5
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
E Beliebig viele Worte Allgemeine Java-Themen 5
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
R Arrayausgabe enthält viele Leerzeichen Allgemeine Java-Themen 4
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
C Threads Verbraucht eine Zeitabfrage viele Rechen-Ressourcen? Allgemeine Java-Themen 8
J BlueJ Methode hat zu viele Parameter Allgemeine Java-Themen 6
D (Viele) Daten performant speichern und lesen Allgemeine Java-Themen 5
S Viele zip-files zu einem kombinieren..? Allgemeine Java-Themen 3
KrokoDiehl Viele JARs und deren Resourcen Allgemeine Java-Themen 9
S Zu viele Felder. Allgemeine Java-Themen 4
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
T viele Threads Allgemeine Java-Themen 14
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
V 1 Methode für viele verschiedene Klassen? Allgemeine Java-Themen 9
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
K Zu viele Threads -> langsamer angehen. Allgemeine Java-Themen 3
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 2
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 1
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
M Datensatz auf ein bestimmten Parameter einzugrenzen Allgemeine Java-Themen 11
B JAX - RS.... Multiple parameter application/x-www-form-urlencoded.... Allgemeine Java-Themen 6
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
W Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter? Allgemeine Java-Themen 4
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F URI mit Parameter klappt nicht Allgemeine Java-Themen 1
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
temi best practice: Parameter überprüfen, wo? Allgemeine Java-Themen 9
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
I Javaaufruf aus Batch inkl. Parameter (Adminrechte) Allgemeine Java-Themen 2
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
K Java FX Zu startenden FXML-Controller per Parameter wählen Allgemeine Java-Themen 2
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
T Klassen Parameter weitergabe Allgemeine Java-Themen 1
C Überschreiben mit kontravariante Parameter Allgemeine Java-Themen 13
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
perlenfischer1984 Wann ist ein Parameter Check sinnvoll Allgemeine Java-Themen 7
Neumi5694 Vererbung Parameter muss 2 Bedingungen erfüllen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
T Parameter Allgemeine Java-Themen 6
R Parameter Adapter - Design Allgemeine Java-Themen 1
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
H Generics als Parameter Allgemeine Java-Themen 1
N [stream-api] Parameter pro Typ zählen Allgemeine Java-Themen 1
OnDemand Maximale Parameter Allgemeine Java-Themen 5
M final vor dem parameter eines Konstruktors Allgemeine Java-Themen 1
S Servlet, per URLConnection Mit String Http Parameter mitsenden Allgemeine Java-Themen 3
M Parameter-Datei einlesen (zeilenweise); Dateiintegrität Allgemeine Java-Themen 7
H JasperReport: Parameter befüllen Allgemeine Java-Themen 7
Joew0815 JList + JTableModel: Parameter der Tabelle übergeben Allgemeine Java-Themen 10
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
G Polymorphie Funktion als Parameter Allgemeine Java-Themen 8
F Parameter im Link /jar-Aufruf Allgemeine Java-Themen 12
S OOP Designrichtlinie Parameter Prüfung Allgemeine Java-Themen 7
C char und char-Array als parameter übergeben Allgemeine Java-Themen 6
B Array Parameter Problem Allgemeine Java-Themen 3
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
S Keytool: mögliche Werte für Parameter Allgemeine Java-Themen 4
H Externes Programm, Parameter Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben