将0自动装箱到通用编号

时间:2015-06-03 09:08:35

标签: java generics numbers autoboxing

也许我的突触中只有一个结......

  public static <T extends Number> T firstNonZero(T... values) {
    for (T value : values) {
      if (value.doubleValue() != 0.0) {
        return value;
      }
    }
    return (T) 0;      // Cannot cast from int to T
  }

我想我不需要解释上述方法。我的问题是我需要&#34;生成&#34;类型为T的零。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

那么,怎么样:

  public static <T extends Number> T firstNonZero(T... values) {
    T zero = null;
    for (T value : values) {
      if (value.doubleValue() != 0.0) {
        return value;
      } else {
        zero = value;
      }
    }
    return zero;
  }

假设至少有一个值传递给方法。

答案 1 :(得分:0)

这个怎么样:

public static <T extends Number> T firstNonZero(T... values) {
        for (T value : values) {
          if (value.doubleValue() != 0.0) {
            return value;
          }
        }
        return (T)Integer.class.cast(0);      // Double class can do too but give 0.0 if double or we will have ClassCastException
      }

此情况下,0号参数也适用