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

我有这样的代码:


    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,它总是一个数字(但不同的类)为零?


精慕HU
浏览 114回答 3
3回答

元芳怎么了

我会采用一个参数来表示zeroComparator 所表示的类型的值,并让调用者传递它。private static <T> boolean nullOrNonPositive(Comparable<T> value, T zero) {&nbsp; &nbsp; return isNull(value) || value.compareTo(zero) <= 0;}称之为nullOrNonPositive(n1, BigDecimal.ZERO); //falsenullOrNonPositive(n2, 0L); //falsenullOrNonPositive(-1L, 0L); //truenullOrNonPositive(2, 0)); //truenullOrNonPositive("1", "0"); //falsenullOrNonPositive("0", "0"); //true如果可能的类型集 ( T) 有限,您可以将零值存储在映射中。

心有法竹

如果您不想传递零值,则可以添加调用 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);}

皈依舞

或者,如果您不想为每个数字定义 0,并且您总是使用nullOrNonPositive数字,您可以这样做:private&nbsp;boolean&nbsp;nullOrNonPositive(Number&nbsp;value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isNull(value)&nbsp;||&nbsp;new&nbsp;BigDecimal(value.toString()).signum()&nbsp;<=&nbsp;0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java