为了账号安全,请及时绑定邮箱和手机立即绑定

将不同类型的可比较数量与零进行比较

将不同类型的可比较数量与零进行比较

精慕HU 2023-05-10 17:02:08
我有这样的代码:    BigDecimal n1= BigDecimal.TEN;    Long n2= 15L;    nullOrNonPositive(n1);    nullOrNonPositive(n2);和方法代码:    private boolean nullOrNonPositive(Comparable value) {        return isNull(value) || value.compareTo(BigDecimal.ZERO) <= 0;    }我确实得到了 an Exceptionthat Longcannot compared to BigDecimal,这很明显。有没有办法使方法 generic 和 compare Comparable,它总是一个数字(但不同的类)为零?
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我会采用一个参数来表示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) 有限,您可以将零值存储在映射中。


查看完整回答
反对 回复 2023-05-10
?
心有法竹

TA贡献1866条经验 获得超5个赞

如果您不想传递零值,则可以添加调用 main 函数的方法。这使调用者不必知道zero每种类型的值是什么。

private static <T> boolean nullOrNonPositive(Comparable<T> value, T zero) {

  return isNull(value) || value.compareTo(zero) <= 0;    

}


private boolean nullOrNonPositive(BigDecimal value) {

  return nullOrNonPositive(value, BigDecimal.ZERO)

}


private boolean nullOrNonPositive(Long value) {

  return nullOrNonPositive(value, 0L);

}


查看完整回答
反对 回复 2023-05-10
?
皈依舞

TA贡献1851条经验 获得超3个赞

或者,如果您不想为每个数字定义 0,并且您总是使用nullOrNonPositive数字,您可以这样做:

private boolean nullOrNonPositive(Number value) {
    return isNull(value) || new BigDecimal(value.toString()).signum() <= 0;
}


查看完整回答
反对 回复 2023-05-10
  • 3 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信