如何编写添加数字的通用方法

我想定义一个方法来在不同的类型号之间进行求和:

 void add (T one, T two) { T res = one + two; } 

上面的方法不起作用,因为类型擦除将T转换为Object ,因此+运算符没有在Object定义…

怎么办?

谢谢。

您将不得不使用有界类型参数:

 public  double add (T one, T two) { return one.doubleValue() + two.doubleValue(); } 

请注意,它使用double作为返回类型,因为这是覆盖最大值范围的原始数字类型 – 并且一个或两个参数也可以是double 。 请注意, Number还有BigDecimalBigInteger作为子类,它们可以表示超出double范围的值。 如果你想正确处理这些情况,它会使方法变得更复杂(你必须开始处理不同类型的不同)。

我能想到的“最简单”的解决方案就是这个(借助投射和自动装箱/拆箱):

 @SuppressWarnings("unchecked")  T add(T one, T two) { if (one.getClass() == Integer.class) { // With auto-boxing / unboxing return (T) (Integer) ((Integer) one + (Integer) two); } if (one.getClass() == Long.class) { // Without auto-boxing / unboxing return (T) Long.valueOf(((Long) one).longValue() + ((Long) two).longValue()); } // ... } 

添加您想要支持的类型。 或者,您也可以处理null

看看关于SO的讨论: 如何添加两个java.lang.Numbers?

这和你的问题差不多。 无论哪种方式,你都不应该使用generics,为什么? 简单:因为使用generics,你无法添加Float和Double,一般来说你应该可以做到!

 template  A add (A a, A b) { return (a+b); } int main() { int x =10, y =20; cout <<"The Integer Addition is " << add(x,y); return 0; }