На самом деле нет никакого способа сделать это должным образом, потому что информация о типе времени компиляции, которую вы хотите проверить (т.е. String
), недоступна во время выполнения (т.е. когда фактически происходит приведение) через процесс, известный как * 1002. * стирание . Я думаю, что для вас лучший способ передать свою десериализованную коллекцию через какую-то сделанную на заказ «шашку»:
Map<?,?> conf = deserialize(rsrc);
Map<String, String> checked = checkMap(conf, String.class, String.class);
//can use checked freely
где:
@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
}