我正在尝试创建一个泛型函数,它接受任何类型的Number
,并且如果该数字等于零,则有条件地执行某些操作。我希望任何人能够传递任何扩展Number(BigDecimal,BigInteger,Byte,Double,Float,Integer,Long或Short)的类
到目前为止,我已尝试使用instanceof
找出该数字的类型,然后将其与等效类型进行比较
public static boolean isZero(Number number) {
if (number instanceof BigDecimal) {
return BigDecimal.ZERO.equals(number);
} else if (number instanceof BigInteger) {
return BigInteger.ZERO.equals(number);
} else if (number instanceof Byte) {
return new Byte((byte) 0).equals(number);
} else if (number instanceof Double) {
return new Double(0).equals(number);
} else if (number instanceof Float) {
return new Float(0).equals(number);
} else if (number instanceof Integer) {
return new Integer(0).equals(number);
} else if (number instanceof Long) {
return new Long(0).equals(number);
} else if (number instanceof Short) {
return new Short((short) 0).equals(number);
}
return false;
}
这很有效,但它很长而且很麻烦。有什么方法可以简化这个吗?
答案 0 :(得分:6)
不幸的是,这不可能以一般方式进行; "零"甚至不能保证一般Number
可以表示(因为你可以设计一个" PositiveInteger"类只代表正数且仍然坚持Number
类规格)。
尝试将值转换为任何其他类可能会导致截断或舍入,这会使测试无效,因此遗憾的是,使用Number
类本身的任何方法都可能会产生不正确的结果。