将0自动装箱到通用编号

sjn*_*ngm 2 java generics autoboxing numbers

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

  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
  }
Run Code Online (Sandbox Code Playgroud)

我想我不需要解释上面的方法.我的问题是我需要"生成"类型的零T.

我怎么做?

Era*_*ran 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;
  }
Run Code Online (Sandbox Code Playgroud)

这假设至少有一个值传递给该方法.