una - matriz dinamica java
¿Alguna forma de declarar una matriz en línea? (8)
Como dice Draemon, lo más cerca que Java se acerca a los arreglos en línea es el new String[]{"blah", "hey", "yo"}
sin embargo, hay un truco genial que te permite hacer algo como
array("blah", "hey", "yo")
con el tipo inferido automáticamente.
He estado trabajando en una API útil para aumentar el lenguaje Java para permitir matrices en línea y tipos de colección. Para más detalles google proyecto Espresso4J o verlo here
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 hago la llamada? es decir, en lugar de:
String[] strs = {"blah", "hey", "yo"};
m(strs);
¿Puedo simplemente reemplazar esto con una línea y evitar declarar una variable nombrada que nunca voy a usar?
Draemon tiene razón. También puedes declarar que m
tomas 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
Me gustaría añadir que la sintaxis de inicialización de matriz es muy breve y flexible. Lo uso MUCHO para extraer datos de mi código y colocarlos en un lugar más utilizable.
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 el código de comando para configurar un sistema de menús. El "+" es suficiente para indicarle que coloque ese elemento debajo del elemento anterior.
Podría vincularlo a la clase menuHandler ya sea por una convención de nomenclatura de métodos, nombrando mis métodos algo así como "menuFile, menuFileSave, menuFileLoad, ..." y uniéndolos de manera reflexiva (hay otras alternativas).
Esta sintaxis permite una definición de menú INCREÍBLEMENTE breve y un método "initMenus" extremadamente reutilizable. (Sin embargo, no me molesto en reutilizarlo porque siempre es divertido escribir y solo toma unos minutos + algunas líneas de código).
Cada vez que vea un patrón en su código, vea si puede reemplazarlo con algo como esto, y siempre recuerde cuán sucinta es la sintaxis de inicialización de la matriz.
Otra forma de hacerlo, si desea el resultado como una Lista en línea, puede hacerlo de la siguiente manera:
Arrays.asList(new String[] { "String1", "string2" });
Otra opción es usar ArrayUtils.toArray en org.apache.commons.lang3
ArrayUtils.toArray("elem1","elem2")
Puede escribir directamente la matriz en Java moderno, sin un inicializador. Tu ejemplo es válido ahora. 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 estar en línea, deberá declarar el tipo:
functionCall(new String[]{"blah", "hey", "yo"});
o usar varargs (argumentos variables)
void functionCall(String...stringArray) {
// Becomes a String[] containing any number of items or empty
}
functionCall("blah", "hey", "yo");
Esperemos que los desarrolladores de Java permitan la inicialización implícita en el futuro.
Puedes crear un método en alguna parte
public static <T> T[] toArray(T... ts) {
return ts;
}
entonces utilízalo
m(toArray("blah", "hey", "yo"));
para mejor aspecto
m(new String[]{"blah", "hey", "yo"});