¿Alguna forma de declarar una matriz en línea?

Digamos que tengo un método m () que toma una matriz de cadenas como argumento. ¿Hay alguna manera de declarar esta matriz en línea cuando realizo la llamada? es decir, en lugar de:

String[] strs = {"blah", "hey", "yo"}; m(strs); 

¿Puedo reemplazar esto con una línea y evitar declarar una variable con nombre que nunca voy a usar?

 m(new String[]{"blah", "hey", "yo"}); 

Draemon es correcto. También puedes declarar que m toma varargs :

 void m(String... strs) { // strs is seen as a normal String[] inside the method } m("blah", "hey", "yo"); // no [] or {} needed; each string is a separate arg here 

Otra forma de hacerlo, si quiere el resultado como una Lista en línea, puede hacerlo así:

 Arrays.asList(new String[] { "String1", "string2" }); 

Puedes crear un método en alguna parte

 public static  T[] toArray(T... ts) { return ts; } 

luego úsalo

 m(toArray("blah", "hey", "yo")); 

para una mejor mirada.

Puede escribir directamente la matriz en Java moderno, sin un inicializador. Tu ejemplo ahora es válido En general, es mejor nombrar el parámetro de todos modos.

 String[] array = {"blah", "hey", "yo"}; 

o

 int[] array = {1, 2, 3}; 

Si tiene que alinearse, deberá declarar el tipo:

 functionCall(new String[]{"blah", "hey", "yo"}); 

o use varargs (argumentos variables)

 void functionCall(String...stringArray) { // Becomes a String[] containing any number of items or empty } functionCall("blah", "hey", "yo"); 

Con suerte, los desarrolladores de Java permitirán la inicialización implícita en el futuro

Me gustaría agregar que la syntax de inicialización de la matriz es muy breve y flexible. Lo uso MUCHO para extraer datos de mi código y ubicarlo en otro lugar más útil.

Como ejemplo, a menudo he creado menús como este:

 Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...}); 

Esto me permitiría escribir código come para configurar un sistema de menú. El “+” es suficiente para indicarle que coloque ese artículo debajo del ítem anterior.

Podría vincularlo a la clase menuHandler, ya sea por un método de nomenclatura de convenciones nombrando mis métodos como “menuFile, menuFileSave, menuFileLoad, …” y uniéndolos de manera reflexiva (hay otras alternativas).

Esta syntax permite una increíblemente breve definición de menú y un método “initMenus” extremadamente reutilizable. (Sin embargo, no me molesto en reutilizarlo porque siempre es divertido escribir y solo toma unos minutos + unas pocas líneas de código).

cada vez que vea un patrón en su código, vea si puede reemplazarlo con algo así y siempre recuerde cuán breve es la syntax de inicialización de la matriz.

Como dice Draemon, lo más cerca que Java llega a los arreglos en línea es el new String[]{"blah", "hey", "yo"} sin embargo, hay un buen truco que te permite hacer algo como

array("blah", "hey", "yo") con el tipo deducido automáticamente.

He estado trabajando en una API útil para boost el lenguaje Java para permitir matrices en línea y tipos de colección. Para más detalles, google project Espresso4J o mira esto aquí

Otra opción es usar ArrayUtils.toArray en org.apache.commons.lang3

 ArrayUtils.toArray("elem1","elem2")