我想定义一个方法来在不同的类型号之间进行求和:
<T> void add (T one, T two)
{
T res = one + two;
}
Run Code Online (Sandbox Code Playgroud)
上面的方法不起作用,因为类型擦除转换T
为Object
+因此+运算符没有定义Object
...
怎么办?
谢谢.
Mic*_*rdt 15
您将不得不使用有界类型参数:
public <T extends Number> double add (T one, T two)
{
return one.doubleValue() + two.doubleValue();
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是它采用双作为返回类型,因为这是原始的数字类型,它包含的值的最大范围内-和一个或两个参数可能是double
太.需要注意的是Number
还具有BigDecimal
与BigInteger
作为子类,其可以表示的范围以外的值double
.如果你想正确处理这些情况,它会使方法更加复杂(你必须开始处理不同类型的不同).
Luk*_*der 13
我能想到的"最简单"的解决方案就是这个(借助投射和自动装箱/拆箱):
@SuppressWarnings("unchecked")
<T> 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());
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
添加您想要支持的类型.或者,您也可以处理null
......
归档时间: |
|
查看次数: |
26112 次 |
最近记录: |