我遇到了一个奇怪的问题。我不明白为什么这段代码不起作用:
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,它们为它们定义了+运算符。所以我真的不明白这个
答案 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);
最后一堂课没有任何意义。你的类型基本上就是你提供的类型。