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

questionAnswers(2)

yourAnswerToTheQuestion