2008-08-02 22 views
61

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

de seguridad Tipo: El reparto del objeto a la lista es en realidad la comprobación con la lista Tipo de borrado

me sale 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; 
+1

Si desea deshacerse del subrayado amarillo en Eclipse, pero no desea agregar '@ SuppressWarning', tiene la opción de ignorar la advertencia en las preferencias. En la ventana de preferencias, vaya a _Java> Compiler> Errors/Warnings_, luego en la sección _Generic types_, cambie la opción ** Operación de tipo genérico no revisada ** a ** Ignore ** – Axel

Respuesta

50

Esta advertencia se presenta porque Java no almacena realmente información de tipo en tiempo de ejecución en un objeto que usa genéricos. Por lo tanto, 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 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, intenta:

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

Sin embargo, tenga en cuenta que usted no será capaz de utilizar ciertos métodos como añadir debido a que el compilador no sabe si está intentando añadir 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 anotación SuppressWarning).

Cuestiones relacionadas