Em Java, como posso evitar tipos brutos ao chamar getClass em uma instância de um tipo genérico?
Suponha que eu tenha isso em Java:
List<String> list = new ArrayList<String>();
list.getClass();
O tipo da última expressão éClass<? extends List>
. Eu entendo porque, devido ao apagamento, não pode serClass<? extends List<String>>
. Mas por que não pode serClass<? extends List<?>>
?
Não há como evitar os doisavisos de seleção não verificados eavisos de tipo bruto se eu quero atribuir o resultado dessa expressão a uma variável que de alguma forma mantém a informação de que essa classe é realmente algum tipo deList
?
Class<? extends List> listClass = list.getClass(); // raw type warning
Class<? extends List<?>> listClass = (Class<? extends List<?>>) list.getClass(); // unchecked cast warning