我想在java中编写一个泛型方法,如下所示:
public <T extends Number & Comparable<T>> void test(T[] a){
T b=a[0];
if(a[0]>0){
a[0]*=a[0];
b+=a[1];
}
}
Run Code Online (Sandbox Code Playgroud)
再后来,我可以提供任一Integer[]或Double[]或其他Number亚型的方法.但我上面尝试的代码给了我错误.
请帮我.谢谢.
除基元之外的所有类型(包括推断的泛型类型)都是不支持算术运算的对象(包装类使用装箱/拆箱来获取已知的伪造行为)
和类型擦除使得编译的代码使用强制转换来获得正确的行为(即在运行时,JVM不知道传递了哪种类型,它需要知道以获得正确的装箱/拆箱行为)
唯一(真正的)解决方案是为您想要支持的所有原语提供实现
在 Java 中你不能使用泛型来做到这一点。例如,这就是 C++ 的好处。
在某种程度上,您可以将其定义为“奇怪”,因为可以在Java 的原始包装器上使用运算符。但这是因为您不能在java.lang.Number原始包装器的超类上使用运算符。
一些资源: