convert array java set hashset

java - ArrayStoreException arrojado al convertir HashSet a array



to array c# (2)

El problema es que está omitiendo los tipos genéricos para que no vea el error y Java no puede rechazar su código, incluso si está mal.

El problema es que la firma de Arrays::asList es asList(T... values) , pero T no puede ser una primitiva, por lo que los argumentos variados se colapsan en un int[] (que ahora es un objeto) y Arrays.asList devuelve una List<int[]> .

Luego páselo a un constructor HashSet genérico que luego acepte un Collection<Object> sin ningún problema, y HashSet<Integer> a un HashSet<Integer> , con el compilador que le advierte sobre el uso de tipos sin formato.

Finalmente, intenta asignar los elementos en el conjunto hash (que son de tipo int[] ) a los elementos en una matriz Integer[] causa la excepción, eso es como hacer

Integer[] data = new Integer[5]; data[0] = new int[] {1, 2, 3};

lo cual está mal, pero Java no puede darse cuenta en el momento de la compilación.

Si hubiera construido el HashSet través del new HashSet<> , el compilador de Java habría presentado un error. Puede resolver el problema pasando un Integer[] al método asList para que se trate correctamente como argumentos variados.

Esta pregunta ya tiene una respuesta aquí:

Tengo un código que se ve así:

int[] ho = new int[10]; ho[0]= 1; ho[2]= 1; ho[4]= 5; HashSet<Integer> hs = new HashSet(Arrays.asList(ho)); Integer[] a = hs.toArray(new Integer[hs.size()]);

Este código tiene mucho sentido para mí, pero arroja una ArrayStoreException cuando lo ejecuto. ¿Porqué es eso? El HashSet es un conjunto de Integer , y también lo es el conjunto de salida.


ArrayStoreException : "si el tipo de tiempo de ejecución de la matriz especificada no es un supertipo del tipo de tiempo de ejecución de cada elemento de este conjunto"

ArrayStoreException se lanza para indicar que se ha intentado almacenar el tipo de objeto incorrecto en una matriz de objetos.

Intenta cambiar int[] to Integer[]