这个问题在这里已有答案:
我用的是实例。但是有没有其他方法来添加两个通用值。可以这样做吗?
public static<T extends Number> T add(T x, T y){
T sum;
sum=x + y;
return sum;
}
你可以这样做来支持整数和双精度(和浮点数),虽然我没有看到真正的价值
public static<T extends Number> T add(T x, T y){
if (x == null || y == null) {
return null;
}
if (x instanceof Double) {
return (T) new Double(x.doubleValue() + y.doubleValue());
} else if (x instanceof Integer) {
return (T)new Integer(x.intValue() + y.intValue());
} else {
throw new IllegalArgumentException("Type " + x.getClass() + " is not supported by this method");
}
}
我会说你不能因为Number抽象类不提供“添加”操作。
我认为使用Number可以做的最好的事情是使用doubleValue()方法,然后使用+操作。但是你将有一个双返回类型(也许你可以在调用方法中强制转换为你的concret类)
public static <T extends Number> double add(T x, T y) {
double sum;
sum = x.doubleValue() + y.doubleValue();
return sum;
}
小心无效检查
注意精度损失(例如:BigDecimal)
编辑:不,不幸的是,你实际上不能这样做,因为你不能将Double转换为Integer,例如,即使你可以将一个double转换为int。
我猜你可以这样做:
public static<T extends Number> T add(T x, T y){
Double sum;
sum = x.doubleValue() + y.doubleValue();
return (T) sum;
}
可能有意义,至少对于Number的大多数子类来说......