2012-06-05 10 views
5

Estoy buscando una parte relevante de la Especificación del lenguaje Java (JLS) que describe el comportamiento al invocar un método aria variable (vararg).¿Qué parte de la Especificación del lenguaje Java describe el comportamiento de los varargs omitidos?

considerar que el método:

public static void printVarArgs(String... args) { 
    System.out.println(Arrays.toString(args)); 
} 

Si invoco el método de esta manera:

printVarArgs(); 

La salida se parecerá a: [] debido a la omisión de args en el sitio de llamada se ha convertido en una matriz vacía en el método printVarArgs.

Estoy buscando el punto de JLS que define este comportamiento. Lo más cerca que he encontrado es 15.12.4.2 Evaluate Arguments, pero no da este ejemplo, y no estoy seguro de si este caso está cubierto por la descripción formal/matemática.

¿Qué parte de JLS describe la creación automática de una matriz vacía cuando se omite una vararg?

Respuesta

4

El texto de esa sección JLS dice:

Si el método que se invoca un método aridad variable (§8.4.1) m, que necesariamente tiene n > 0 parámetros formales. El parámetro formal final de m necesariamente tiene el tipo T[] para algunos T, y m se está invocando necesariamente con k >= 0 expresiones de argumentos reales.

Si m se invoca con expresiones argumento real kn, o, si m está siendo invocado con k != n expresiones argumento real y el tipo de la expresión argumento de orden k no es la asignación compatible con T[], a continuación, la lista de argumentos (e1, ... , en-1, en, ...ek) se evalúa como si fue escrito como (e1, ..., en-1, new T[]{en, ..., ek}).

En el caso que estamos hablando, hay k == n - 1 argumentos formales, por lo en, ..., ek es una secuencia vacía, y eso significa que el argumento se evalúa como si fuera (e1, ..., en-1, new T[]{}).

En otras palabras, el comportamiento se especifica en la sección que estaba viendo.

5

De JLS 15.12.4.2:

El parámetro formal final del m tiene necesariamente tipo T [] para algunos T, y m es necesariamente siendo invocado con k> = 0 expresiones argumento real.

Eso es desde la perspectiva de callee. No estoy seguro de dónde se expresa desde la perspectiva de la persona que llama la conducta que usted cita, pero está algo implícito.

+0

Hola, gracias por tu respuesta. I + 1, pero acepté la otra respuesta, ya que la encuentro un poco más explicativa. – Grundlefleck

Cuestiones relacionadas