En realidad no hay ninguna manera de hacer esto correctamente porque la información de tipo en tiempo de compilación que desea comprobar (es decir String
) no está disponible en tiempo de ejecución, (es decir, cuando el elenco que realmente ocurre) a través del proceso conocido como borrado . Creo que la mejor manera es para que usted pueda pasar su colección deserializado a través de un poco de "corrector" a medida:
Map<?,?> conf = deserialize(rsrc);
Map<String, String> checked = checkMap(conf, String.class, String.class);
//can use checked freely
donde:
@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
}
De eso tenía miedo; solo esperaba que me faltara algo:/ –
¡Es una advertencia válida solo en el contexto de un diseño de función de idioma quebrado! –
Si no fuera por el borrado de tipo, no podríamos deserializar estos objetos. Creo que es una victoria –