如何在Java中编写泛型方法以支持比较和算术运算

5 java generics

我想在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亚型的方法.但我上面尝试的代码给了我错误.

请帮我.谢谢.

rat*_*eak 5

除基元之外的所有类型(包括推断的泛型类型)都是不支持算术运算的对象(包装类使用装箱/拆箱来获取已知的伪造行为)

和类型擦除使得编译的代码使用强制转换来获得正确的行为(即在运行时,JVM不知道传递了哪种类型,它需要知道以获得正确的装箱/拆箱行为)

唯一(真正的)解决方案是为您想要支持的所有原语提供实现


Mar*_*aux 3

在 Java 中你不能使用泛型来做到这一点。例如,这就是 C++ 的好处。

在某种程度上,您可以将其定义为“奇怪”,因为可以Java 的原始包装器上使用运算符。但这是因为您不能在java.lang.Number原始包装器的超类上使用运算符。

一些资源: