Es gibt nicht wirklich eine Möglichkeit, diese richtig, weil die Informationen Kompilierung-Typ tun Sie (dh String
) überprüfen wollen, ist zur Laufzeit nicht verfügbar ist, (das heißt, wenn die Besetzung tatsächlich auftritt) durch den Prozess als Löschung bekannt . Ich denke, dass der beste Weg ist, damit Sie Ihre entserialisierten Sammlung durch einig maßgeschneiderten „Checker“ zu übergeben:
Map<?,?> conf = deserialize(rsrc);
Map<String, String> checked = checkMap(conf, String.class, String.class);
//can use checked freely
wo:
@SuppressWarnings("unchecked")
public static <K, V> Map<K,V> checkMap(Map<?,?> map, Class<? extends K> k, Class<? extends V> v) {
for (Map.Entry<?, ?> e : map) {
k.cast(e.getKey()); //will throw ClassCastException
v.cast(e.getValue());
}
return (Map<K,V>) map; //unchecked
}
Das war, was ich hatte Angst; hatte nur gehofft, dass ich etwas verpasst habe:/ –
Es ist eine gültige Warnung nur im Zusammenhang mit einem gebrochenen Sprachen-Feature-Design! –
Wenn es keine Typlöschung gäbe, könnten wir diese Objekte nicht deserialisieren. Ich denke, es ist ein Sieg. –