如果java抽象类"Number"的任何对象等于零

Jon*_*ych 5 java numbers

我正在尝试创建一个泛型函数,它接受任何类型的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)

这有效,但它很长很麻烦.有什么方法可以简化这个吗?

nne*_*neo 6

不幸的是,这不可能以一般方式进行; 一般来说,"零"甚至不能保证可以表示Number(因为你可以设计一个"正整数"类,它只代表正数并且仍然符合Number类规范).

尝试将值转换为任何其他类可能会导致截断或舍入,这会使您的测试无效,因此不幸的是,使用Number类本身的任何方法可能会产生不正确的结果.