Компилятор не знает, что instance.getClass()
связано с instance
.
Скажите, instance
- это Number
: instance.getClass()
- это Class<? extends Number>
, потому что instance
может быть Integer
.
И тогда алгоритм вывода типов не знает, что instance
является экземпляром этого Class<? extends Number>
. По мнемонике PECS , toInstance
является потребительским методом, но поскольку он ограничен границей extends
, единственное, что вы можете передать ему, это буквально null
.
Я не могу придумать чистый способ сделать это без некоторого предупреждения подавления. Но в этом случае хорошо подавлять (при условии, что instance
является экземпляром класса reifiable): вы знаете больше, чем компилятор о типах, так что продолжайте и используйте escape-люк.