Dado que se usa un método con var args, cualquier otro formato podría generar ambigüedades. Tener los varargs últimos evita posibles ambigüedades sin requerir sintaxis adicional para resolver las ambigüedades que disminuirían el beneficio de la característica.
en cuenta la declaración de método siguientes:
public void varargsAreCool(String surname, String firstname,
String... nicknames) {
// some cool varargs logic
}
Cuando se utiliza como varargsAreCool("John", "Smith")
es obvio que no tiene John Smith
apodos. Cuando se usa así varargsAreCool("Andrew", "Jones", "The Drew", "Jonesy")
.
Consideremos ahora la siguiente declaración de método inválida:
public void varargsAreCool(String surname, String... nicknames,
String firstname) {
// some cool varargs logic
}
Cuando se utiliza como varargsAreCool("John", "Smith")
es Smith
apodo de John o su apellido? Si es su apellido, ¿cómo indico que no tiene apodos? Para hacer esto, probablemente tendrías que usar el método como este varargsAreCool("John", new String[]{}, "Smith")
, que es torpe y en cierto modo frustra el propósito de la función.
Cuando se utilizan así varargsAreCool("Andrew", "The Drew", "Jonesy", "Jones")
son The Drew, Jonesy and Jones
todos los apodos y el apellido ¿nombre? Una vez más, esta ambigüedad podría resolverse, pero a costa de una sintaxis adicional torpe.
En general, la respuesta es "porque esas son las reglas". Las reglas son las reglas.¿Por qué importa? ¿Por qué * las reglas existen? ¿Qué problema tienes? –
@ S.Lott: Estoy de acuerdo, pero todavía tengo curiosidad sobre la razón de ser de la decisión de Sun. –
Cada vez que veo un mensaje de error tengo la sensación de que estoy haciendo algo mal. ¿Qué estoy haciendo mal aquí aparte de romper la regla? –