Welche Spezifikation unterstützt optionale Parameter?
Antworten
Zu viele Anzeigen?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.
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);
}
}
}
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...){}
Ü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.