java generics variadic-functions

java - ¿Me estoy perdiendo algo, o los varargs rompen Arrays.asList?



generics variadic-functions (2)

private void activateRecords(long[] stuff) { ... api.activateRecords(Arrays.asList(specIdsToActivate)); }

¿No debería esta llamada a Arrays.asList devolver una lista de Long s? En cambio, devuelve una List<long[]>

public static <T> List<T> asList(T... a)

La firma del método es consistente con los resultados, el varargs arroja la matriz completa en la lista. Es lo mismo que new ArrayList(); list.add(myArray) new ArrayList(); list.add(myArray) Y sí, sé que debe usarse así: Arrays.asList(T t1, T t2, T t3)

Supongo que lo que quiero decir es que, en lugar de la forma varargs, ¿por qué no puedo tener mi antiguo método AsList (al menos creo que así es como funcionaba) que toma los contenidos y los pone individualmente en ¿una lista? ¿Alguna otra forma limpia de hacer esto?


El Autoboxing no se puede hacer en arreglos. Usted puede hacer:

private List<Long> array(final long[] lngs) { List<Long> list = new ArrayList<Long>(); for (long l : lngs) { list.add(l); } return list; }

o

private List<Long> array(final long[] lngs) { List<Long> list = new ArrayList<Long>(); for (Long l : lngs) { list.add(l); } return list; }

(observe que los tipos iterables son diferentes)

p.ej

Long l = 1l;

pero no

Long[] ls = new long[]{1l}


Eso es porque long [] y Long [] son ​​tipos diferentes.

En el primer caso T es largo [], en el segundo T es largo.

¿Cómo arreglar esto? No use long [] en primer lugar?