Qualquer maneira de declarar um array em linha?

Digamos que eu tenha um método m () que tome uma matriz de Strings como um argumento. Existe uma maneira que eu possa apenas declarar esta matriz em linha quando eu faço a chamada? ou seja, em vez de:

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

Posso apenas replace isso por uma linha e evitar declarar uma variável nomeada que nunca usarei?

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

Draemon está correto. Você também pode declarar m como 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 

Outra maneira de fazer isso, se você quiser o resultado como uma List inline, você pode fazer assim:

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

Você pode criar um método em algum lugar

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

então use

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

para melhor olhar.

Você pode escrever diretamente o array no Java moderno, sem um inicializador. Seu exemplo agora é válido. Geralmente, é melhor nomear o parâmetro mesmo assim.

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

ou

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

Se você precisar inline, precisará declarar o tipo:

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

ou use varargs (argumentos variables)

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

Espero que os desenvolvedores de Java permitam a boot implícita no futuro

Eu gostaria de acrescentar que a syntax de boot da matriz é muito sucinta e flexível. Eu uso muito para extrair dados do meu código e colocá-lo em algum lugar mais utilizável.

Como exemplo, criei menus como este:

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

Isso permitiria que eu escrevesse código para configurar um sistema de menu. O “+” é o suficiente para informar que coloque esse item no item anterior.

Eu poderia vinculá-lo à class menuHandler por uma convenção de nomenclatura de método nomeando meus methods como “menuFile, menuFileSave, menuFileLoad, …” e vinculando-os de forma reflexiva (existem outras alternativas).

Esta syntax permite uma definição de menu SURPREENDENTE e um método “initMenus” extremamente reutilizável. (Ainda não me incomodo em reutilizá-lo porque é sempre divertido escrever e leva apenas alguns minutos + algumas linhas de código).

Sempre que você vir um padrão em seu código, veja se consegue substituí-lo por algo parecido com isso, e lembre-se sempre de como é sucinta a syntax de boot da matriz.

Como Draemon diz, o mais próximo que Java vem para matrizes in-line é o new String[]{"blah", "hey", "yo"} no entanto, há um truque que permite que você faça algo como

array("blah", "hey", "yo") com o tipo inferido automaticamente.

Eu tenho trabalhado em uma API útil para aumentar a linguagem Java para permitir arrays inline e tipos de coleção. Para mais detalhes, visite o projeto Espresso4J ou confira aqui

Outra opção é usar ArrayUtils.toArray em org.apache.commons.lang3

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