seguridad - sitios seguros java
¿Cuál es el significado de la advertencia de seguridad de tipo en ciertos modelos genéricos de Java? (1)
¿Cuál es el significado de la advertencia de Java ?
Tipo de seguridad: la conversión de Objeto a Lista <Integer> en realidad está verificando la lista de tipos 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;
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 el object
es en realidad una 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 tenga una referencia a la lista pero con la información correcta de tipo genérico 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 agregar, o algún método restringido de manera similar, solo tendrá que sufrir el subrayado amarillo en Eclipse (o una anotación SuppressWarning
).