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

时间:2014-08-11 21:08:01

标签: 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;
}

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

1 个答案:

答案 0 :(得分:6)

不幸的是,这不可能以一般方式进行; "零"甚至不能保证一般Number可以表示(因为你可以设计一个" PositiveInteger"类只代表正数且仍然坚持Number类规格)。

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