tipos incompatibles: la variable de inferencia T tiene límites incompatibles [duplicate]
⏰ 2 minutos de lectura
tengo el siguiente fragmento de código
public int solution(int X, int[] A) {
List<Integer> list = Arrays.asList(A);
Por alguna razón, arroja el siguiente error de compilación
Solution.java:11: error: tipos incompatibles: la variable de inferencia T tiene límites incompatibles List list = Arrays.asList(A); ^ restricciones de igualdad: límites inferiores enteros: int[] donde T es una variable de tipo: T extiende el objeto declarado en el método asList(T…)
Supongo que se trata de una característica de Java 8, pero no estoy seguro de cómo resolver el error
Utilizar Integer[] en lugar de int[].
– sp00m
17 de diciembre de 2014 a las 9:56
Arrays.asList está esperando un número variable de Object. int no es un Objectpero int[] es así Arrays.asList(A) creará un List<int[]> con un solo elemento.
Tenga en cuenta que el enfoque de IntStream tiene una semántica ligeramente diferente que el uso de asList; los cambios en la matriz subyacente no se reflejan en la lista resultante. (así que hay una copia de algún tipo en marcha). asList(T…) no copia. Desgraciadamente no conozco ninguna forma de evitarlo.
– rcreswick
12 mayo 2016 a las 14:55
@rcreswick Interesante, no lo sabía. Sin embargo, si este comportamiento es el esperado, entonces probablemente no haya manera de lograrlo con un int[]como el int[] no podría ser la matriz de respaldo de la resultante List<Integer>.
– tobias_k
12 mayo 2016 a las 14:59
He estado tratando de encontrar una manera de lograr esto, y creo que la única forma es crear un nuevo tipo de lista que administre los accesos para reutilizar una matriz de respaldo, lo que probablemente obviaría las mejoras generales de rendimiento que espera al usar un matriz de respaldo.
– rcreswick
14 de mayo de 2016 a las 3:33
En Java 8 puedes hacer
List<Integer> list = IntStream.of(a).boxed().collect(Collectors.toList());
No hay atajos para convertir desde int[] to List as Arrays.asList no se ocupa del boxeo y solo creará una Lista que no es lo que desea. Tienes que hacer un método de utilidad.
int[] ints = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>();
for (int index = 0; index < ints.length; index++)
{
intList.add(ints[index]);
}
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Utilizar
Integer[]
en lugar deint[]
.– sp00m
17 de diciembre de 2014 a las 9:56