Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将0自动装箱到通用编号_Java_Generics_Numbers_Autoboxing - Fatal编程技术网

Java 将0自动装箱到通用编号

Java 将0自动装箱到通用编号,java,generics,numbers,autoboxing,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 } public

也许我的突触上有个结

  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
  }
public static T firstNonZero(T…值){
对于(T值:值){
如果(value.doubleValue()!=0.0){
返回值;
}
}
返回(T)0;//无法从int转换为T
}
我想我不需要解释上面的方法。我的问题是我需要“生成”类型为
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 firstNonZero(T…值){
T零=零;
对于(T值:值){
如果(value.doubleValue()!=0.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
      }
public static T firstNonZero(T…值){
对于(T值:值){
如果(value.doubleValue()!=0.0){
返回值;
}
}
return(T)Integer.class.cast(0);//Double类也可以,但如果Double,则为0.0,否则我们将有ClassCastException
}

在这种情况下,如果找不到非零值而不是零值,则0 number参数也会起作用。class.cast(0)不应该使用名为
firstNonZero
的方法真正返回
null
,甚至引发异常?它不能返回
null
,这将是毫无意义的。我认为这不会起作用。使用
double d=firstNonZero(0.0)进行尝试Double.class.cast
,请尝试使用
int d=firstNonZero(0)@tobias_k no对于双d=firstNonZero(0.0)它不会失败;正如我刚才尝试的那样,关于您关于Double.class.cast的第二个查询,我更新了答案注释“Double class也可以,但如果Double”失败,则给出0.0:
assertEquals(new Long(0),NumberUtilities.firstNonZero(0L))