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