int c = a*b;
Это утверждение на самом деле работает, так как T
ограничен Integer
, поэтому после стирания, типы a
и b
являются Integer
и они распакованные в целое.
return c;
Это не работает, так как тип возвращаемого значения метода не Integer
, это T
, и несмотря на то, <T extends Integer>
и Integer
является final
, так T
может быть только Integer
, компилятор не позволяет, что , так как он не принимает значение finality
типа, связанного с ним (то есть, насколько это возможно, метод может принимать экземпляры подкласса связанного типа и не может автоматически помещать int
в любой подтекст класс класса).
Изменение типа возвращаемого значения Integer
сделает код прохода компиляции:
public static <T extends Integer> Integer addNumber(T a , T b){
int c = a*b;
System.out.println(c);
return c;
}
Конечно, это не имеет смысла использовать Integer
(или любой конечный класс) в качестве типа, связанного для общего типа параметр.
Он даже не работает с Int C = A * B. – Pooja
@Pooja Это для меня. Я просто попробовал. – Eran
if не разрешает * b –
Pooja