W Javie, jak mogę uniknąć surowych typów podczas wywoływania getClass w instancji typu ogólnego?

Załóżmy, że mam to w Javie:

List<String> list = new ArrayList<String>();
list.getClass();

Typ ostatniego wyrażenia toClass<? extends List>. Rozumiem, dlaczego z powodu wymazania nie może byćClass<? extends List<String>>. Ale dlaczego nie może byćClass<? extends List<?>>?

Czy nie mogę w żaden sposób uniknąć obuniezaznaczone rzucone ostrzeżenia iostrzeżenia typu surowego jeśli chcę przypisać wynik tego wyrażenia do zmiennej, która w jakiś sposób przechowuje informacje, że ta klasa jest w rzeczywistości czymś w rodzajuList?

Class<? extends List> listClass = list.getClass(); // raw type warning
Class<? extends List<?>> listClass = (Class<? extends List<?>>) list.getClass(); // unchecked cast warning

questionAnswers(2)

yourAnswerToTheQuestion