我正在尝试创建一个泛型函数,它接受任何类型的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;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它很长很麻烦.有什么方法可以简化这个吗?
不幸的是,这不可能以一般方式进行; 一般来说,"零"甚至不能保证可以表示Number(因为你可以设计一个"正整数"类,它只代表正数并且仍然符合Number类规范).
尝试将值转换为任何其他类可能会导致截断或舍入,这会使您的测试无效,因此不幸的是,使用Number类本身的任何方法可能会产生不正确的结果.
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |