999 Stimmen

Wie verwende ich optionale Parameter in Java?

Welche Spezifikation unterstützt optionale Parameter?

27voto

Yishai Punkte 87548

VarArgs und Überladen wurden bereits erwähnt. Eine weitere Option ist ein Bloch-Builder-Muster, das in etwa so aussehen würde:

 MyObject my = new MyObjectBuilder().setParam1(value)
                                 .setParam3(otherValue)
                                 .setParam6(thirdValue)
                                 .build();

Obwohl dieses Muster am besten geeignet wäre, wenn Sie optionale Parameter in einem Konstruktor benötigen.

17voto

az3 Punkte 3392

In JDK>1.5 können Sie es wie folgt verwenden;

public class NewClass1 {

    public static void main(String[] args) {

        try {
            someMethod(18); // Age : 18
            someMethod(18, "John Doe"); // Age & Name : 18 & John Doe
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    static void someMethod(int age, String... names) {

        if (names.length > 0) {
            if (names[0] != null) {
                System.out.println("Age & Name : " + age + " & " + names[0]);
            }
        } else {
            System.out.println("Age : " + age);
        }
    }
}

10voto

Ishan Fernando Punkte 2478

Sie können die Überladung von Methoden wie folgt nutzen.

 public void load(String name){ }

 public void load(String name,int age){}

Sie können auch die @Nullable-Anmerkung verwenden

public void load(@Nullable String name,int age){}

einfach null als ersten Parameter übergeben.

Wenn Sie Variablen gleichen Typs übergeben, können Sie Folgendes verwenden

public void load(String name...){}

9voto

T.Todua Punkte 48569

Kurzfassung:

Verwendung von drei Punkte :

public void foo(Object... x) {
    String first    =  x.length > 0 ? (String)x[0]  : "Hello";
    int duration    =  x.length > 1 ? Integer.parseInt((String) x[1])     : 888;
}   
foo("Hii", ); 
foo("Hii", 146); 

(basierend auf der Antwort von @VitaliiFedorenko)

5voto

Jigar Shah Punkte 59

Überladen ist in Ordnung, aber wenn es eine Menge von Variablen, die Standardwert benötigt, werden Sie am Ende mit :

public void methodA(A arg1) {  }    
public void methodA(B arg2) {  }
public void methodA(C arg3) {  }
public void methodA(A arg1, B arg2) {  }
public void methodA(A arg1, C arg3) {  }
public void methodA(B arg2, C arg3) {  }
public void methodA(A arg1, B arg2, C arg3) {  }

Ich würde daher vorschlagen, die Variables Argument die von Java bereitgestellt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X