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 reemplazar esto con una línea y evitar declarar una variable con nombre que nunca voy a usar?
Respuestas:
fuente
Draemon es correcto. También puede declarar
m
como tomar varargs :fuente
void m(String... strs, Integer... intgrs)
por ejemplo.void m(Integer i, Double d, String... str)
(String ... strs)
Otra forma de hacerlo, si desea el resultado como una Lista en línea, puede hacerlo así:
fuente
Arrays.asList("string1", "string2", ...)
List
detype[]
dóndetype
está esa primitiva. ej.Arrays.asList([some ints])
resultados en aList<int[]>
.set
al devueltoList
y modificará la matriz.Puede escribir directamente la matriz en Java moderno, sin un inicializador. Su ejemplo ahora es válido. En general, es mejor nombrar el parámetro de todos modos.
o
Si tiene que estar en línea, deberá declarar el tipo:
o usar varargs (argumentos variables)
Esperemos que los desarrolladores de Java permitan la inicialización implícita en el futuro.
Actualización: Respuesta de Kotlin
¡Kotlin ha hecho que trabajar con matrices sea mucho más fácil! Para la mayoría de los tipos, solo use
arrayOf
y determinará implícitamente el tipo. No pase nada para dejarlos vacíos.Las primitivas tienen funciones de utilidad. No pase nada para dejarlos vacíos.
Si ya tiene un
Collection
y desea convertirlo en una matriz en línea, simplemente use:Si necesita forzar un tipo de matriz, use:
fuente
doSomething({"blah", "hey", "yo"})
, que es sobre lo que estaba preguntando la pregunta original.Puedes crear un método en alguna parte
entonces úsalo
para una mejor apariencia
fuente
Me gustaría agregar que la sintaxis de inicialización de matriz es muy sucinta y flexible. Lo uso MUCHO para extraer datos de mi código y colocarlo en un lugar más utilizable.
Como ejemplo, a menudo he creado menús como este:
Esto me permitiría escribir el código Come para configurar un sistema de menús. El "+" es suficiente para decirle que coloque ese elemento debajo del elemento anterior.
Podría vincularlo a la clase menuHandler ya sea mediante una convención de nomenclatura de métodos nombrando mis métodos de forma similar a "menuFile, menuFileSave, menuFileLoad, ..." y vinculándolos reflexivamente (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 escribirlo 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 como esto, y siempre recuerde cuán sucinta es la sintaxis de inicialización de la matriz.
fuente
Otra opción es usar ArrayUtils.toArray en org.apache.commons.lang3
fuente
Como dice Draemon, lo más cercano que Java está a las matrices en línea es
new String[]{"blah", "hey", "yo"}
sin embargo, que hay un buen truco que te permite hacer algo comoarray("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 échale un vistazo aquí
fuente