Этот вопрос вызван странным поведением HashMap.put()
Думаю, я понимаю, почему Map<K,V>.put принимает K, но Map<K,V>.get принимает Object, похоже, что это не приведет к сломанию слишком большого кода.
Теперь мы попадаем в сценарий, подверженный ошибкам:
java.util.HashMap<Long, String> m = new java.util.HashMap<Long, String>();
m.put(5L,"Five"); // compiler barfs on m.put(5, "Five")
m.contains(5); // no complains from compiler, but returns false
Не удалось ли это решить, вернув true, если значение Long находилось в диапазоне int и значения равны?