0

我有一个代码片段,我无法理解它到底做了什么。这段代码在 JavaBean 中。

private Object myNumb;

//then getter and setter for this

public int compareTo(myRptObj o){

        if (myNumb instanceof String && o.myNumb instanceof Integer) {
          return_value =  1;
        } else if (myNumb instanceof Integer && o.myNumb instanceof String) {
          return_value = -1;
        } else if (myNumb instanceof String && o.myNumb instanceof String) {
          return_value = ((String) myNumb).compareTo((String)o.myNumb);
        } else if (myNumb instanceof Integer && o.myNumb instanceof Integer) {
          return_value = ((Integer) myNumb).compareTo((Integer)o.myNumb);
        }

}

我想了解compareToString 和 Integer 的比较是如何完成的? myNumb可以是 typeIntegerString.

4

4 回答 4

1

该代码段确保any Integer的比较小于any String

Integer-Integer并且String-String比较按照您期望的方式进行。

于 2011-09-21T10:44:49.020 回答
1

前两个 if 子句确保字符串被认为大于整数。后两个 if 子句将字符串之间和整数之间的比较委托给compareTo()这些类的实现,以便它们像往常一样排序。

请注意,在这种代码中,变量可以是“X 或 Y 类型”是非常非常糟糕的设计- 正是因为它迫使您编写这样的代码。

相反,决定一种类型并在必要时转换为/从该类型转换。

于 2011-09-21T10:49:02.637 回答
0

...它到底是做什么的。

基本上:字符串大于整数,如果两者是相同的类型,则使用它们的自然顺序(比较 2 个字符串或 2 个整数)。

于 2011-09-21T10:46:24.997 回答
0

由于myNumb可以是StringInteger,因此compareTo将首先检查它们是什么类型。如果它们不是同一类型(一个是Integer,一个是String)它们不相等,因此返回 1 或 -1 。如果它们属于同一类型,则将它们强制转换为该类型并委托给该类型的 compareTo。

于 2011-09-21T10:47:08.333 回答