Представь у тебя в твоей map будет лежать тип Object, а ты передашь obj типа String.
Очевидно всякий String является одновременно и Object тоже. Но String.class не то же самое что Object.class. Соответственно в map ничего не отыщется, а по смыслу код должен отработать.
(по мапе можно итерироваться, если что. Это как замена List<Pair<A, B>>, только Map<A, B>)