¿Cuál es el significado de la advertencia de seguridad de tipos en determinadas conversiones genéricas de Java?

StackOverflow https://stackoverflow.com/questions/382

Pregunta

¿Cuál es el significado de la Advertencia de Java?

Tipo de seguridad:La conversión de Objeto a Lista<Integer> en realidad se compara con la Lista de tipo borrada.

Recibo esta advertencia cuando intento convertir un Objeto a un tipo con información genérica, como en el siguiente código:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
¿Fue útil?

Solución

Esta advertencia existe porque Java en realidad no almacena información de tipo en tiempo de ejecución en un objeto que usa genéricos.Así, si object es en realidad un List<String>, no habrá ClassCastException en tiempo de ejecución, excepto hasta que se acceda a un elemento de la lista que no coincida con el tipo genérico definido en la variable.

Esto puede causar más complicaciones si se agregan elementos a la lista con esta información de tipo genérico incorrecta.Cualquier código que aún contenga una referencia a la lista pero con la información de tipo genérico correcta ahora tendrá una lista inconsistente.

Para eliminar la advertencia, intente:

List<?> list = (List<?>) object;

Sin embargo, tenga en cuenta que no podrá utilizar ciertos métodos como agregar porque el compilador no sabe si está intentando agregar un objeto de tipo incorrecto.Lo anterior funcionará en muchas situaciones, pero si tiene que usar add, o algún método restringido similar, simplemente tendrá que soportar el subrayado amarillo en Eclipse (o un SuppressWarning anotación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top