Malheureusement, oui.
void MyParameterizedFunction(String param1, int param2, bool param3=false) {}
pourrait être écrit en Java 1.5:
void MyParameterizedFunction(String param1, int param2, Boolean... params) {
assert params.length <= 1;
bool param3 = params.length > 0 ? params[0].booleanValue() : false;
}
Mais si vous devez ou non dépend de la façon dont vous vous sentez sur le compilateur de générer un
new Boolean[]{}
pour chaque appel.
Pour plusieurs defaultable paramètres:
void MyParameterizedFunction(String param1, int param2, bool param3=false, int param4=42) {}
pourrait être écrit en Java 1.5:
void MyParameterizedFunction(String param1, int param2, Object... p) {
int l = p.length;
assert l <= 2;
assert l < 1 || Boolean.class.isInstance(p[0]);
assert l < 2 || Integer.class.isInstance(p[1]);
bool param3 = l > 0 && p[0] != null ? ((Boolean)p[0]).booleanValue() : false;
int param4 = l > 1 && p[1] != null ? ((Integer)p[1]).intValue() : 42;
}
Cela correspond syntaxe C++, qui permet uniquement les paramètres par défaut à la fin de la liste des paramètres.
Au-delà de la syntaxe, il y a une différence lorsque ce fut le moment de l'exécution de la vérification du type de defaultable paramètres et C++, les vérifie lors de la compilation.