Methoden key value Parameter

velo

Mitglied
Hallo,

ich bin auf der Suche nach der richtigen Java Lösung key/value Parameter zu nutzen. Genauer mein Problem:

Wenn eine Methode aufgerufen wird und ich die Reihenfolge und Anzahl der Parameter nicht festlegen will, dazu sollen auch manche optional sein und der Compiler soll schon vor der Laufzeit falsche Aufrufe erkennen - wie macht man das?

Die "..." Erweiterung für Parameter ist ja nett, aber die Auswertung bedarf einer Schleife mit Überprüfung zur Laufzeit. Eigene Objekte wäre möglich, aber das artet aus.


Also so und vielleicht ohne, dass die Reihenfolge entscheidend ist.
Java:
public void anyMethod ( Integer foo, String(optional) bar, ... )
 

kaoZ

Top Contributor
Guckst du hier :

Optional Parameters

Was die Reihenfolge angeht:

Java:
public void anyMethod(Integer index, Object...objects){...}

dies bedarf dann Typprüfungen um auf verschiedene Parameter in dem Array zu reagieren.

du könntest auch einfach überladene Methoden anbieten ;)

z.B

Java:
public void anyMethod(Integer index){
 anyMethod(index, "");
}

public void anyMethod(Integer index, String key){
 ....
}
 
Zuletzt bearbeitet:

velo

Mitglied
Danke, das mit den überladenen Methoden war mir klar und habe es vergessen zu erwähnen. Ist dann natürlich viel extra Code - unübersichtlich. Und wenn die Kombination kommt, potenziert sich die Anzahl.

Sehe ich das richtig, dass ihr meint, ich solle eine HashMap als Objekt übergeben?

Das dachte ich auch immer. Aber dann kann ich doch keine Typenprüfung vor der Laufzeit durchführen, oder? Und wie sieht es dann mit obligatorischen und optionalen Parametern aus (if/else?)?
 

Androbin

Bekanntes Mitglied
... Aber dann kann ich doch keine Typenprüfung vor der Laufzeit durchführen, oder? ...
Doch, natürlich :autsch:
Java:
public static boolean isValid( Object obj, Class c ) {
	
	if ( obj.getClass() == c ) return true;
	else return false;
	
}

... Und wie sieht es dann mit obligatorischen und optionalen Parametern aus (if/else?)? ...
Wie wäre z. B. eine zweite HashMap<String, Boolean> :idea:
Oder aber du verwendest statt des Strings ein Enum :toll:
 

velo

Mitglied
Jetzt bin ich verwirrt.

isValid muss man ja aufrufen - also während der Laufzeit. Wie meinst du das mit VOR der Laufzeit?
 
T

trez

Gast
Wenn eine Methode aufgerufen wird und ich die Reihenfolge und Anzahl der Parameter nicht festlegen will, dazu sollen auch manche optional sein und der Compiler soll schon vor der Laufzeit falsche Aufrufe erkennen - wie macht man das?

...

Jetzt bin ich verwirrt.

Ich (wir?) auch ...

Der Compiler überwacht sehr genau ob die Typen der Paramter zu den Typen der Funktion passt.
Beliebige Reihenfolge der Paramter ist in Java nicht möglich
Beliebige Anzahl schon, aber alle müssen denselben Typ haben
Optionale Parameter gibt es nicht, allerdings kannst du ungültige Werte (z.B. "null" für eine Referenz übergeben)

Für Java ist ein String ein String und somit gleichwertig, da gibt es keine Reihenfolge..

Ein Beispiel in dem mich etwas überrascht - nämlich die Tatsache, dass sowohl Implementation 3 und 4 möglich sind.

Java:
public class Test {
	
	public static void doIt(String s, int i, boolean b) {
		System.out.println("Implementation 1");
	}

	public static void doIt(boolean b, String s, int i) {
		System.out.println("Implementation 2");
	}

	public static void doIt(String s1, String s2) {
		System.out.println("Implementation 3");
	}

	public static void doIt(String ... s1) {
		System.out.println("Implementation 4");
	}

	public static void main(String[] args) {
		// Implementation 1
		doIt("Hallo", 1, false);

		// Implementation 2
		doIt(true, "Hallo", 1);

		// Das gibt selbstverständlich einen Compilationsfehler,
		// da es keine Funktion mit diesem Parameterprofil gibt
		//  doIt(1, false, "Hallo");

		// Implementation 4
		doIt("Hallo", "Welt", "wie", "geht", "es", "dir");
		// logischerweise für den Compiler absolut identisch
		doIt("dir", "geht", "Welt", "es", "Hallo", "wie");

		// Implementation 3
		doIt("Hallo", "Welt");
	}
}
 

velo

Mitglied
Danke für den ausführlichen Beitrag.

Einen optionalen Parameter gibt es scheinbar nicht.

Nun gut immerhin gibt es nun dieses "...", um mehr Werte anzugeben.

Ja, was soll ich sagen ... ich bin etwas enttäuscht von Java an dieser Stelle. Aber wer weiss, vielleicht tut sich da noch was. Immerhin gab es früher das mit "..." ja auch nicht.

Ich stellte mir das so so ähnlich vor, wie man auf der Kommandozeile Parameter zu einem Befehl angeben kann:

Code:
doit -x -more 123 -write "hello" -d -p -number 7

wobei eben die Kombination und Reihenfolge variieren können sollte. Aber trotzdem sollten die Typen geprüft werden. Dafür wird wohl eine eigene Klasse noch das Beste sein vermute ich, was dann aber bei der Verwendung echt übertrieben aussieht. Und wenn man das öfters braucht, dann ist es nicht mehr schön.
 

kaoZ

Top Contributor
Nun gut immerhin gibt es nun dieses "...", um mehr Werte anzugeben.

Das hier nennt sich Varargs und bedeutet Variable Argumentenliste, hier wird aus einer Variablen länge an übergebenen Parametern, ein Array erstellt welches diese enthält.

gleichzusetzen in etwa mit der übergabe einer Arrays, nur das du hier keine bestimmte länge angeben musst und das Array selbst beim Kompilieren erzeugt wird, deshalb ja auch "variabel".

doit -x -more 123 -write "hello" -d -p -number 7

Das hier könnte man über Startparameter abarbeiten

sprich all dieses könntest du der main Methode übergeben und dann per Fallentscheidung dementsprechend Reaktionen auf verschiedene Parameter ausführst, ALLE Parameter werden hierbei als String übergeben, da main ebend ein String[] array als Parameter erwartet.

Java:
public static void main(String[] args){...}

ließe sich z.B so auswerten

Java:
public static void main(String[] args){

 for(String s : args){
  
   if(s.equals("-x"){
     //do something
   }
  if(s.equals("write"){
     //do something other
   }
....usw
 }
}

oder halt mit switch.....
 
Zuletzt bearbeitet:

velo

Mitglied
Danke. Das mit der Kommandozeile war mehr eine Analogie, um zu zeigen was ich meine. Eigentlich wäre "doit" also eine Methode.

Aber an deinem Bespiel kann man ganz gut das Dilemma erkennen: "write" oder "x" können nur während der Laufzeit geprüft werden, da es Strings sind.
 

kaoZ

Top Contributor
du könntest lediglich darauf reagieren wenn jemand Startparameter verwendet, und dann ggf. je nach Fall eine Bestimmte Methode ausführen .

z.B wenn jemand deine Applikation zwar von der Konsole Startet aber eine Gui nutzen möchte könntest du ihm über einen Startparameter so die Möglichkeit hierzu geben,

mir ist noch nicht ganz klar warum du dies zur laufzeit machen wollen würdest ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J Java call by Value oder Reference Java Basics - Anfänger-Themen 35
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
D String value change listener Java Basics - Anfänger-Themen 2
G Java Object value und entity? Java Basics - Anfänger-Themen 2
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F Entity vs value Java Basics - Anfänger-Themen 3
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N JFreeChart - Value und veriable Zeitachse Java Basics - Anfänger-Themen 15
J Open Office Property Value mit Java aufrufen Java Basics - Anfänger-Themen 0
H call by reference & value Java Basics - Anfänger-Themen 14
R Property Value als null setzen Java Basics - Anfänger-Themen 1
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
B Compiler-Fehler Hilfe!!! required variable ; found value Java Basics - Anfänger-Themen 4
M Arrays als return Value? Java Basics - Anfänger-Themen 2
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
T Schleifenindex "by reference" / "by value" Java Basics - Anfänger-Themen 13
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
B Call by Value/Reference Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
B Variablen unique Value Java Basics - Anfänger-Themen 12
R Key/Value ohne Maps? Java Basics - Anfänger-Themen 2
B Datentypen Key/Value sortieren Java Basics - Anfänger-Themen 15
S Warnung in Eclipse: unassigned closeable value Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
P Key anhand von Value finden (Hashtable) Java Basics - Anfänger-Themen 3
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
M String( char[] value ) Java Basics - Anfänger-Themen 3
feardorcha Java von Kopf bis Fuß "Java ist Pass-by-Value" Java Basics - Anfänger-Themen 6
M Value-returing Methode funktioniert nicht Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
M jSpinner: nur angezeigte Value auslesen? Java Basics - Anfänger-Themen 3
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2
J unexpected type variable/value Java Basics - Anfänger-Themen 2
F Hilfe Regular Expression Grouping Value Java Basics - Anfänger-Themen 3
K unexpected type variable/value Java Basics - Anfänger-Themen 7
turmaline Duration Value Java Basics - Anfänger-Themen 8
T Enum - Key als Value ermitteln Java Basics - Anfänger-Themen 7
K java pass by value Java Basics - Anfänger-Themen 29
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
A ein map key/value"problem" Java Basics - Anfänger-Themen 9
A Regex get Value Java Basics - Anfänger-Themen 5
D Key und Value aus hashMap speichern Java Basics - Anfänger-Themen 7
M HashMap-Value | Array Java Basics - Anfänger-Themen 3
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17
0 Call by value Java Basics - Anfänger-Themen 3
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
H Abhängigkeiten (key-value ) Java Basics - Anfänger-Themen 19
P Value einer Konstante lesen Java Basics - Anfänger-Themen 2
lumo Magic Value?! Java Basics - Anfänger-Themen 19
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
K Maps mit veränderlichen Daten als Value Objekte Java Basics - Anfänger-Themen 3
D Hashtable Value(Array) in String und dann Ausgeben Java Basics - Anfänger-Themen 23
? key - value Struktur in ArrayList Java Basics - Anfänger-Themen 3
G Container für [key,value] elemente ? Java Basics - Anfänger-Themen 7
G Überprüfen ob einen Array einen Value enthält Java Basics - Anfänger-Themen 13
C Passing Reference by Value Java Basics - Anfänger-Themen 4
A Integer Value Error beim Start Java Basics - Anfänger-Themen 5
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
F Hashtable mit String[] als value Java Basics - Anfänger-Themen 2
L HashMap Key<->Value vertauschen Java Basics - Anfänger-Themen 5
T Klasse String enthält Methode value? Java Basics - Anfänger-Themen 2
T Suche über mehrere Felder value = key = value Java Basics - Anfänger-Themen 3
S Value von ein Hashtable collectionen Java Basics - Anfänger-Themen 3
S Value sortieren Java Basics - Anfänger-Themen 3
D Map (HashMap) sortiern nach den Value? Java Basics - Anfänger-Themen 16
W Hashtable Integer als Value Java Basics - Anfänger-Themen 6
M value von Komponenten erhalten Java Basics - Anfänger-Themen 3
G TreeMap sortieren über ArrayList als Value Java Basics - Anfänger-Themen 9
L Value aus einer Map holen Java Basics - Anfänger-Themen 10
R kleinster Value in HashMap Java Basics - Anfänger-Themen 12
H HashMap initialisieren<Key, Value>? Java Basics - Anfänger-Themen 9
B map value auslesen Java Basics - Anfänger-Themen 2
V Beginner question with check true value??? Java Basics - Anfänger-Themen 3
S call by reference vs. call by value - pls help Java Basics - Anfänger-Themen 7
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
C Parameter in verschiedenen Anzahl und Typen Java Basics - Anfänger-Themen 6
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
BeginnerJava "Weihnachtsbäume" anzeigen: Höhe als Parameter Java Basics - Anfänger-Themen 1
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben