Verschiedene Optionen in der Methode

timharvey

Neues Mitglied
Hallo,

Wie erstelle ich Parameteroptionen in einer Methode? Beispielsweise verfügt JOptionPane.showConfirmDialog über einen dritten Parameter, der aus verschiedenen Optionen besteht: „YES_NO_OPTION, YES_NO_CANCEL_OPTION…“. Ich möchte meine eigene Methode mit dem gleichen Prinzip erstellen. LAG, MEDEL und HOG gelten als unterschiedliche Optionen.

Klassenskat {
duales statisches Endergebnis MOMS = 25, ARB_AVG = 28,97, STAT_LAG = 0, STAT_MEDEL = 20, STAT_HOG = 25, LAG = 1, MEDEL = 2, HOG = 3;
public static prisFörJobb (double x, double komSkatt)

Dank.
 

KonradN

Super-Moderator
Mitarbeiter
Also wenn Du es so machen willst, wie bei JOptionPane, dann bist Du doch schon nah dran:
Du hast Konstanten definiert und du hast einen Parameter, der halt dann einen beliebigen Wert entgegen nehmen kann vom Typ der Konstante. (Also z.B. int)

Ganz nebenbei: Dein Code ist natürlich kein gültiger Java Code.

Wenn es aber eine Auswahl ist und der Parameter nur LAG, MEDEL oder HOG sein soll, dann ist es besser, eine Enumeration zu verwenden. Wenn Du da einen int machst mit 1, 2 oder 3, dann kann ich da aber auch andere Werte übergeben. Auch 127 ist ein gültiger int.

Kleine Einordnung: Es kann problematisch sein, wenn Du Konstanten haben solltest für unterschiedliche Angaben. Das kannst Du auch gut erkennen an dem von Dir gewählten Beispiel JOptionPane: Du hast die Options für die Icons aber auch Options, was für eine Nachricht es sein soll. Alles int Konstanten - du kannst diese also vertauschen ohne dass der Compiler es dir mitteilt.

Zu den erwähnten Dingen:
Java-Konstante | Delft Stack
Deklarieren Sie Enum in Java | Delft Stack
 

Barista

Top Contributor
So wie ich Dich verstehe, möchtest Du eine beliebige Anzahl Optionen an eine Methode übergeben.

Dazu fallen mir folgende Möglicheiten ein:

1. Die Optionen werden an einen int-Parameter (oder auch long-Parameter) übergeben, der ein Bitmuster darstellt.

Als Beispiel kann dienen

Java:
java.util.Spliterator.SIZED

verwendet zum Beispiel in der Methode

Java:
java.util.stream.WhileOps.UnorderedWhileSpliterator.characteristics()

(ich hoffe, Deine IDE zeigt Dir diese Codestellen der JRE System Library an).

Die Optionen sind dann int-Werte (oder auch long-Werte) mit bestimmten gesetzten Bits.

Die Bitmuster der einzelnen Optionen dürfen sich nicht überlappen.

Mehrere Optionen werden beim Aufruf der Methode mit dem ODER-Operator (Pipe-Zeichen) verknüpft.


2. Du schreibst am Methodenkopf einen sogenannten varargs-Parameter.

Das sind Parameter mit 3 Punkten nach der Typ-Angabe.

Java erzeugt dann ein Array mit den Werten.


3. Du schreibst am Methodenkopf eine Collection (List, Set, Iterable) als Parameter.

Als Optionswerte bieten sich dann Enums an, weil da Objekte benötigt werden (Java hat leider kein Collections für primitive Werte).

Beim Aufruf müssen die Optionen dann in eine Collection verpackt werden, zum Beispiel mit

Java:
java.util.List.of(E)
 

mihe7

Top Contributor
Beispiel-Code für die Varianten von @Barista:

1. Bitmuster

Java:
public static final int YES = 1;
public static final int NO = 2;
public static final int CANCEL = 4;

public void showOptions(int options) {
    if ((options & YES) == YES) {
        System.out.println("Yes");
    }
    if ((options & NO) == NO) {
        System.out.println("No");
    }
    if ((options & CANCEL) == CANCEL) {
        System.out.println("Cancel");
    }
}

public void howToUse() {
    showOptions(YES);
    showOptions(YES | CANCEL);
    showOptions(YES | CANCEL | NO);
}

Ausgabe:
Code:
Yes
Yes
Cancel
Yes
No
Cancel

2. varargs
Java:
enum Option { YES, NO, CANCEL }

public void showOptions(Option... options) {
    for (Option option : options) {
        System.out.println(option);
    }
}

public void howToUse() {
    showOptions(Option.YES);
    showOptions(Option.YES, Option.CANCEL);
    showOptions(Option.YES, Option.CANCEL, Option.NO);
}
Ausgabe:
Code:
YES
YES
CANCEL
YES
CANCEL
NO

3. Collections
Java:
enum Option { YES, NO, CANCEL }

public void showOptions(EnumSet<? extends Option> options) {
    for (Option option : options) {
        System.out.println(option);
    }
}

public void howToUse() {
    showOptions(EnumSet.of(Option.YES));
    showOptions(EnumSet.of(Option.YES, Option.CANCEL));
    showOptions(EnumSet.of(Option.YES, Option.CANCEL, Option.NO));
}
Ausgabe
Code:
YES
YES
CANCEL
YES
NO
CANCEL
 

Barista

Top Contributor
Die Variante 3 mit dem Set hat den Vorteil, dass man das Auftreten einer Option mit
Java:
contains
prüfen kann.

Bei Variante 1 (Bitmuster) kann die Prüfung auch ohne Schleife erfolgen.
Variante 1 ist wahrscheinlich am schnellsten und resourcensparend, also C-like, aber beim Debuggen und Loggen ungünstig.

Für Variante 2 findet in
Java:
java.util.Arrays
eine Methode
Java:
contains
 

Robert Zenz

Top Contributor
Variante 1 ist wahrscheinlich am schnellsten und resourcensparend, also C-like, aber beim Debuggen und Loggen ungünstig.
Ich fuehle mich an dieser Stelle genoetigt zu ergaenzen (weil Thema zu Anfaengerfrage), dass das richtig ist. Aber ich habe noch nie ein Programm gesehen wo dies zum tragen kam, und ich kann mir auch nicht so richtig eines vorstellen wo dies wichtig waere (weil man dann eigentlich auf C, C++, D, Zig oder aehnlich ausweicht, weil Speicher wichtig).

Ja, es ist schneller und resourcensparender, Nein, man wird es nicht merken.
 

mihe7

Top Contributor
Dann muss ich zur Ergänzung von @Robert Zenz auch noch etwas ergänzen, auch, wenn das in der Praxis praktisch nie eine Rolle spielt: im JDK wurde Wert auf hohe Performanz gelegt, daher basieren die EnumSet-Implementierungen tatsächlich auf Bitmustern, wobei auch noch zwischen "regulären" EnumSets (solche für max. 64 Konstanten) und großen EnumSets (mehr als 64 Konstanten) unterschieden wird.

Der geringe Unterschied in der Performance, die fehlende Typsicherheit bei ints und die nicht gerade intuitiven Bitmanipulationen sprechen nicht unbedingt für den direkten Einsatz von Bitmustern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Umrechnung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 39
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
G Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben