Цель метода putInstance
, в отличие от обычного put
, - обеспечить безопасность типа времени компиляции . В этом случае вы и я легко можем предположить, что number
должен иметь тип, заданный number.getClass()
, но для компилятора эта информация «потеряна». То есть, насколько известно , это , может быть, number
является целым числом, а number.getClass()
является Long.class; он не настолько «умен», чтобы понять, что это безопасно.
Решение: просто используйте put()
! Вы по-прежнему получаете проверки во время выполнения, и после этого вы все равно можете использовать метод getInstance()
* * * * типа *, например, в Long l = this.identifiers.getInstance(Long.class);
.
(Заключительный совет: остерегайтесь, потому что Long.class
и long.class
могут существовать в ClassToInstanceMap
и отображаться на разные значения!)