我有一个代码片段,我无法理解它到底是做什么的。 此代码位于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);
}
}
我想了解compareTo
以及String和Integer的比较是如何完成的?
myNumb
可以是Integer
或String
类型。
答案 0 :(得分:1)
该代码段确保任何 Integer
的比较 String
Integer
- Integer
和String
- String
比较按照您的预期进行。
答案 1 :(得分:1)
前两个if子句确保字符串被认为大于整数。第二个两个if子句将字符串之间的比较和整数之间的比较委托给这些类的compareTo()
实现,以便它们像往常一样排序。
请注意,拥有这种代码的非常非常糟糕的设计,其中变量可以是“X或Y型” - 正是因为它迫使您编写这样的代码。 / p>
相反,决定一种类型并在必要时转换为该类型。
答案 2 :(得分:0)
......究竟是什么。
基本上:字符串大于整数,如果两者都是相同类型,则使用它们的自然顺序(比较2个字符串或2个整数)。
答案 3 :(得分:0)
由于 myNumb 可以是字符串或整数, compareTo 正在检查它们的类型。如果它们不是同一类型(一个是整数,一个是字符串),则它们不相等,因此根据需要返回1或-1。如果它们属于同一类型,则将它们转换为该类型并委托给该类型的compareTo。