java - 比较不同类型的可比数量为零
问题描述
我有这样的代码:
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
,它总是一个数字(但不同的类),为零?
解决方案
我将采用一个参数,该参数表示zero
Comparator 表示的类型的值,并让调用者传递它。
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
) 集有限,您可以将零值存储在映射中。
推荐阅读
- google-apps-script - 如何为每一行创建一个电子表格,并在 Google Apps 脚本中导入整行?
- python - 如何在 Python 中检查多个按键?(键盘模块)
- android - 如何为 Android 实现 BottomAppBar?
- go - 为什么我在此 libp2p 代码中收到类型错误?
- python - Python Flask - WTF SelectField 数据导致错误_mysql_exceptions.ProgrammingError
- c++ - VSCode c++ task.json 包含路径和库
- python - Tensorflow 错误获取参数
必须是字符串或张量 - php - 如何按点对这个多维数组进行排序?
- python - NetworkX g.neighbors(n) 时间复杂度
- android - 用于firestore的最小android api?