Wie kann ich in Java RAW-Typen vermeiden, wenn ich getClass für eine Instanz eines generischen Typs aufrufe?
Angenommen, ich habe dies in Java:
List<String> list = new ArrayList<String>();
list.getClass();
Der Typ des letzten Ausdrucks istClass<? extends List>
. Ich verstehe, warum es wegen der Löschung nicht sein kannClass<? extends List<String>>
. Aber warum kann es nicht seinClass<? extends List<?>>
?
Kann ich beidem nicht ausweichen?ungeprüfte Warnungen undRohtyp-Warnungen Wenn ich das Ergebnis dieses Ausdrucks einer Variablen zuweisen möchte, die irgendwie die Information beibehält, dass es sich bei dieser Klasse tatsächlich um eine Art von handeltList
?
Class<? extends List> listClass = list.getClass(); // raw type warning
Class<? extends List<?>> listClass = (Class<? extends List<?>>) list.getClass(); // unchecked cast warning