我遇到了一个奇怪的问题.我不明白为什么这段代码不起作用:
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扩展任何内容.