为什么Generics Java不会发生原语的自动装箱和拆箱。
public static <T extends Number> T addNumber(T a , T b)
{
int c = a*b;
System.out.println(c);
return c;
}
这就是为什么*操作无法执行以及为什么无法返回c。任何帮助都会很明显。
答案 0 :(得分:1)
泛型不应该与原始类型一起使用。 T表示应该是对象的类型参数。
更多参考文献
Why don't Java Generics support primitive types?
Java Generics ? , E and T what is the difference?
Restrictions on generics
答案 1 :(得分:0)
int c = a*b;
此声明确实有效,因为T
受Integer
限制,因此在删除后,a
和b
的类型为Integer
,它们是return c;
unboxed to int。
Integer
这不起作用,因为方法的返回类型不是T
,而是<T extends Integer>
,即使Integer
和final
是{{1} },所以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
(或任何最终类)作为泛型类型参数的类型绑定是没有意义的。