2009-11-25 28 views

Respuesta

27

Sólo puede utilizar la sintaxis {1, 2, 3} en situaciones muy limitadas, y esto no es una de ellas. Prueba esto:

int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6}; 

Por cierto, buen estilo de Java es escribir la declaración como:

int[] array = ... 

EDIT: Para el registro, la razón de que {1, 2, 3} es tan restringido es que su tipo es ambigua . En teoría, podría ser una matriz de enteros, largos, flotantes, etc. Además, la gramática de Java tal como la define el JLS lo prohíbe, así que eso es todo.

+0

Gracias por la explicación Stephen! – marcosbeirigo

+0

En JDK7 parece que '{1, 2, 3}' (en otras situaciones) será un conjunto, con un tipo determinado por el tipo de destino (como métodos genéricos, como 'Arrays.asList'). –

+0

Solo para el registro, el cambio de lenguaje propuesto al que hace referencia el comentario de Tom no lo convirtió en JDK 7. –

5
boolean funkyBoolean = true; 
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6}; 
3

Un inicializador de matriz puede ser especificado en una declaración, o como parte de una expresión de creación array (§15.10), creando una matriz y proporcionar algunos valores iniciales

Eso es lo que el Java Spec dice (10.6). Entonces, la versión 'corta' (con la expresión de creación) solo está permitida en declaraciones (int[] a = {1,2,3};), en todos los demás casos necesita una construcción new int[]{1,2,3}, si desea usar el inicializador.

+0

¡Gracias, eso fue útil! – marcosbeirigo