En Java, ¿cómo puedo evitar los tipos brutos al llamar a getClass en una instancia de un tipo genérico?
Supongamos que tengo esto en Java:
List<String> list = new ArrayList<String>();
list.getClass();
El tipo de la última expresión esClass<? extends List>
. Entiendo por qué, debido al borrado, no puede serClass<? extends List<String>>
. Pero ¿por qué no puede ser?Class<? extends List<?>>
?
¿No hay manera de evitar ambos?advertencias de yeso sin marcar yadvertencias de tipo crudo Si quiero asignar el resultado de esta expresión a una variable que de alguna manera mantiene la información de que esta clase es en realidad algún tipo deList
?
Class<? extends List> listClass = list.getClass(); // raw type warning
Class<? extends List<?>> listClass = (Class<? extends List<?>>) list.getClass(); // unchecked cast warning