首页 > 解决方案 > 比较不同类型的可比数量为零

问题描述

我有这样的代码:

    BigDecimal n1= BigDecimal.TEN;
    Long n2= 15L;

    nullOrNonPositive(n1);
    nullOrNonPositive(n2);

和方法代码:

    private boolean nullOrNonPositive(Comparable value) {
        return isNull(value) || value.compareTo(BigDecimal.ZERO) <= 0;
    }

我确实得到了一个Exception无法Long与 比较的BigDecimal,这很明显。有没有办法使方法泛型和 compare Comparable,它总是一个数字(但不同的类),为零?

标签: javagenericsnumbers

解决方案


我将采用一个参数,该参数表示zeroComparator 表示的类型的值,并让调用者传递它。

private static <T> boolean nullOrNonPositive(Comparable<T> value, T zero) {
    return isNull(value) || value.compareTo(zero) <= 0;
}

称它为

nullOrNonPositive(n1, BigDecimal.ZERO); //false
nullOrNonPositive(n2, 0L); //false

nullOrNonPositive(-1L, 0L); //true
nullOrNonPositive(2, 0)); //true

nullOrNonPositive("1", "0"); //false
nullOrNonPositive("0", "0"); //true

如果可能的类型 ( T) 集有限,您可以将零值存储在映射中。


推荐阅读