¿Cuál es el significado del tipo de advertencia de seguridad en ciertos moldes genéricos de Java?

votos
61

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

Tipo de seguridad: el reparto de Objeto a Lista realmente se compara con el tipo borrado Lista

Recibo esta advertencia cuando intento enviar 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;
Publicado el 02/08/2008 a las 09:58
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
50

Esta advertencia está ahí porque Java no está almacenando información de tipo en tiempo de ejecución en un objeto que usa genéricos. Por lo tanto, si objectes realmente a List<String>, no habrá ClassCastExceptionen tiempo de ejecución excepto hasta que se acceda a un elemento desde la lista que no coincide con el tipo genérico definido en la variable.

Esto puede causar complicaciones adicionales si se agregan elementos a la lista, con esta información incorrecta de tipo genérico. 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 incoherente.

Para eliminar la advertencia, intente:

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

Sin embargo, tenga en cuenta que no podrá usar ciertos métodos como agregar porque el compilador no sabe si está tratando de agregar un objeto de tipo incorrecto. Lo anterior funcionará en muchas situaciones, pero si tiene que usar agregar, o algún método similarmente restringido, solo tendrá que sufrir el subrayado amarillo en Eclipse (o una SuppressWarninganotación).

Respondida el 02/08/2008 a las 09:58
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more