为什么我不能在泛型方法中使用带有Integer和Double的+运算符?

Mai*_*r00 0 java generics

我遇到了一个奇怪的问题.我不明白为什么这段代码不起作用:

public static <Type1 extends  Integer, Type2 extends Double > 
               Object addition(Type1 first, Type2 second)
     {
         return second * first;
     }
Run Code Online (Sandbox Code Playgroud)

编译器声称Operator * cannot be applied to Type2,Type1.但是这些类型扩展了Integer和Double,它们为它们定义了+运算符.所以我真的不明白这一点

小智 9

你错了.Integer,Double或任何其他扩展Number类的对象都没有定义"+"或任何其他运算符.你能够执行类似(整数+双精度)的唯一原因是自动装箱.自动装箱是一种"硬编码"功能,适用于非常小的预定义类,例如Integer,Double等.

此外,Integer和所有其他Number子类都声明为"final",因此"Type extends Integer"没有任何意义,因为您无法从Integer扩展任何内容.