Class<? extends Integer>
компилируется нормально, но Integer
является окончательным типом, поэтому нет смысла использовать его в качестве верхней границы (ничего никогда не будет extend
его ).
Если вы попытаетесь использовать окончательный тип в качестве верхней границы для параметра типа, вы получите предупреждение компилятора :
The type parameter T should not be bounded by the final type Integer. Final types cannot be further extended
. Почему использование окончательного типа в качестве верхней границы для подстановочного знака было бы совершенно нормально, но выдавало бы предупреждение для параметра типа? Почему Java даже позволяет ограничивать подстановочные знаки конечным верхним типом?