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

时间:2013-07-21 14:33:53

标签: java generics

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:0)

最简单的解决方案是使用double来存储每个可能的int值。

public static double addition(double first, double second)
 {
     return second + first;
 }

我假设你想要+加法,而不是*加法

你可以运行

 double d1 = addition(1, 5.5);
 double d2 = addition(10.1, 5);
 double d3 = addition(1, 2);
 double d4 = addition(10.1, 12.3455);

最后一堂课没有任何意义。你的类型基本上就是你提供的类型。