Digamos que eu tenho um método m () que usa uma matriz de Strings como argumento. Existe uma maneira de simplesmente declarar essa matriz em linha quando faço a chamada? Em vez de:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Posso apenas substituir isso por uma linha e evitar declarar uma variável nomeada que nunca vou usar?
Respostas:
fonte
Draemon está correto. Você também pode declarar
m
como tendo varargs :fonte
void m(String... strs, Integer... intgrs)
por exemplo.void m(Integer i, Double d, String... str)
(String ... strs)
Outra maneira de fazer isso, se você deseja o resultado como uma Lista embutida, pode fazê-lo assim:
fonte
Arrays.asList("string1", "string2", ...)
List
detype[]
ondetype
é esse primitivo. por exemplo,Arrays.asList([some ints])
resulta em aList<int[]>
.set
o retornadoList
e ele modificará a matriz.Você pode escrever diretamente a matriz no Java moderno, sem um inicializador. Seu exemplo agora é válido. Geralmente, é melhor nomear o parâmetro de qualquer maneira.
ou
Se você precisar fazer a linha, precisará declarar o tipo:
ou use varargs (argumentos variáveis)
Espero que os desenvolvedores de Java permitam a inicialização implícita no futuro
Atualização: Resposta do Kotlin
Kotlin tornou muito mais fácil trabalhar com matrizes ! Para a maioria dos tipos, basta usar
arrayOf
e isso determinará implicitamente o tipo. Não passe nada para deixá-los vazios.Primitivas têm funções utilitárias. Não passe nada para deixá-los vazios.
Se você já possui um
Collection
e deseja convertê-lo em um array embutido, basta usar:Se você precisar coagir um tipo de matriz, use:
fonte
doSomething({"blah", "hey", "yo"})
, que é o que a pergunta original estava perguntando.Você pode criar um método em algum lugar
então use
para uma melhor aparência.
fonte
Eu gostaria de acrescentar que a sintaxe de inicialização do array é muito sucinta e flexível. Eu uso muito para extrair dados do meu código e colocá-los em algum lugar mais utilizável.
Como exemplo, muitas vezes eu criei menus como este:
Isso me permitiria escrever um código para configurar um sistema de menus. O "+" é suficiente para dizer a ele para colocar esse item no item anterior.
Eu poderia vinculá-lo à classe menuHandler por uma convenção de nomenclatura de métodos, nomeando meus métodos como "menuFile, menuFileSave, menuFileLoad, ..." e vinculando-os de forma reflexiva (existem outras alternativas).
Essa sintaxe permite uma definição de menu INCRÍVEL, INCRÍVEL, e um método "initMenus" extremamente reutilizável. (No entanto, eu não me incomodo em reutilizá-lo porque é sempre divertido escrever e leva apenas alguns minutos + algumas linhas de código).
sempre que vir um padrão em seu código, verifique se é possível substituí-lo por algo assim e lembre-se sempre de quão sucinta é a sintaxe de inicialização da matriz !.
fonte
Outra opção é usar ArrayUtils.toArray em org.apache.commons.lang3
fonte
Como diz Draemon, o mais próximo que o Java chega das matrizes embutidas é
new String[]{"blah", "hey", "yo"}
no entanto, há um truque interessante que permite fazer algo comoarray("blah", "hey", "yo")
com o tipo inferido automaticamente.Eu tenho trabalhado em uma API útil para aprimorar a linguagem Java para permitir matrizes inline e tipos de coleção. Para mais detalhes, projeto do Google Espresso4J ou confira aqui
fonte