Basicamente, eu tenho um ArrayList de locais:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
abaixo disso eu chamo o seguinte método:
.getMap();
os parâmetros no método getMap () são:
getMap(WorldLocation... locations)
O problema que estou tendo é que não tenho certeza de como passar a lista INTEIRO locations
para esse método.
eu tentei
.getMap(locations.toArray())
mas o getMap não aceita isso porque não aceita Objetos [].
Agora se eu usar
.getMap(locations.get(0));
funcionará perfeitamente ... mas, de alguma forma, preciso passar por TODOS os locais ... É claro que eu poderia continuar adicionando locations.get(1), locations.get(2)
etc., mas o tamanho da matriz varia. Só não estou acostumado a todo o conceito deArrayList
Qual seria a maneira mais fácil de fazer isso? Eu sinto que não estou pensando direito agora.
java
variadic-functions
MJ93
fonte
fonte
Respostas:
Artigo de origem: Passando uma lista como argumento para um método vararg
Use o
toArray(T[] arr)
método(
toArray(new WorldLocation[0])
também funciona, mas você alocaria uma matriz de comprimento zero sem motivo.)Aqui está um exemplo completo:
fonte
someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))
, você receberá um aviso muito irritante se a função tiver mais do que algumas linhas (porque você pode suprimi-la para toda a função ou precisa criar a matriz em uma etapa adicional e suprimir o aviso na variável que você armazená-lo.No Java 8:
fonte
locations.toArray(WorldLocations[]::new)
também parece funcionar desde java 11 (sem o.stream()
)Uma versão mais curta da resposta aceita usando o Guava:
pode ser reduzido ainda mais importando estaticamente para oArray:
fonte
Você pode fazer:
ou
ou
@SuppressWarnings("unchecked")
é necessário para remover o aviso de ide.fonte