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))代码>