自动装箱 0 到通用数字

Autoboxing 0 to Generic Number

也许我的神经突触打结了...

  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
  }

我想我不需要解释上面的方法。我的问题是我需要 "generate" 一个 T.

类型的零

我该怎么做?

嗯,怎么样:

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

这是假设至少有一个值被传递给该方法。

这个怎么样:

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 数字参数