作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在 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];
}
}
然后,我可以为该方法提供 Integer[]
或 Double[]
或其他 Number
子类型。但是我上面尝试的代码给了我错误。
请帮帮我。谢谢。
最佳答案
除基元外的所有类型(包括推断的泛型类型)都是不支持算术运算的对象(包装类使用装箱/拆箱来获得已知的伪行为)
类型删除使编译后的代码使用强制转换来获得正确的行为(即在运行时 JVM 不知道传递的是什么类型,它需要知道才能获得正确的装箱/拆箱行为)
唯一(真正的)解决方案是为您想要支持的所有原语提供实现
关于java - 如何在 Java 中编写泛型方法以支持比较和算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8581416/
我是一名优秀的程序员,十分优秀!