我可以在java中添加两个通用值吗? [重复]

问题描述 投票:1回答:3

这个问题在这里已有答案:

我用的是实例。但是有没有其他方法来添加两个通用值。可以这样做吗?

     public static<T extends Number> T add(T x, T y){
      T sum;
      sum=x + y;
      return sum;
     }
java generics addition
3个回答
5
投票

你可以这样做来支持整数和双精度(和浮点数),虽然我没有看到真正的价值

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");
    }
 }

2
投票

我会说你不能因为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)


2
投票

编辑:不,不幸的是,你实际上不能这样做,因为你不能将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的大多数子类来说......

© www.soinside.com 2019 - 2024. All rights reserved.