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

Solution avec dans mon cas une Map<Object,Object> – 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);
		}
	}