Java : caster un Object en Map

Boris HUISGEN
Boris HUISGEN
|

Alors le casse-tête du jour : comment convertir un Object en une Map ?

Solution avec dans mon cas une Map - ce qui constitue toute la difficulté - :

Object ret;
Map<Object, Object> map;

ret = getData();
map = safeCastMap(ret, Object.class, Object.class);

Voici les fonctions de vérifications nécessaires :

@SuppressWarnings({ "unchecked" })
public static <K, V> Map<K, V> safeCastMap(Object map, Class<K> keyType, Class<V> valueType) {
    checkMap(map);
    checkMapContents(keyType, valueType, (Map<?, ?>) map);
    return (Map<K, V>) map;
}

private static void checkMap(Object map) {
    checkType(Map.class, map);
}

private static <K, V> void checkMapContents(Class<K> keyType, Class<V> valueType, Map<?, ?> map) {
    for (Map.Entry<?, ?> entry : map.entrySet()) {
        checkType(keyType, entry.getKey());
        checkType(valueType, entry.getValue());
    }
}

private static <K> void checkType(Class<K> expectedType, Object obj) {
    if (!expectedType.isInstance(obj)) {
        throw new IllegalArgumentException("Expected " + expectedType + " but was " + obj.getClass() + ": " + obj);
    }
}
Boris HUISGEN
Boris HUISGEN
Blog owner
  • #java