Посмотрите на свои MyGenClass
в изоляции. T
может быть буквально чем угодно. Это не обязательно целое число. Я мог бы назвать это с помощью String, или HashMap, или ArrayList, или буквально что-нибудь еще .
MyGenClass gnClass = new MyGenClass();
gnClass.setAge("hello");
gnClass.setAge(new HashMap<String, String>());
gnClass.setAge(new ArrayList<String>());
Во всех этих случаях присваивание переменной Integer недопустимо, следовательно, ошибка компилятора.
Вы только случайно вызываете его с целым числом в вашем примере. Компилятор не может утверждать, что так будет всегда.
Похоже, вы вообще не должны использовать дженерики. Просто измените подпись на
public void setAge(Integer ageParam)