【发布时间】:2012-11-11 03:00:11
【问题描述】:
以前有人问过,但我没有找到一个合适的实现和解释。
public int compareTo(Object o)
{
if (this == null || o == null)
{
return 0;
}
Tok tmp = (Tok) o;
if (this.rang < tmp.rang)
{
return -1;
} else if (this.rang > tmp.rang ) {
return 1;
} else {
return 0;
}
}
我阅读了两个我发现的类似问题;他们坚持实施另一种方法。我不明白为什么这不起作用。该方法获取一个额外的对象,并检查它是否为有效实例或null,如果null 则直接返回0;实现空安全compareTo 的最简单方法是什么?
对我有用的实现是:
public int compareTo(Object o)
{
if (o == null)
{
return 0;
}
Tok tmp = (Tok) o;
if (this.rang < tmp.rang)
{
return -1;
} else if (this.rang > tmp.rang ) {
return 1;
} else {
return 0;
}
}
这不是最好的实现,人们应该看看这里有什么好人作为答案。对于我的特定情况,这已经足够了,因为它永远不会为空,但接收到的对象可以为空,并且初始实现状态是否为空返回 0。因此,如果给定对象为空,则返回 0。
【问题讨论】:
-
this在 Java 中是从不null。 -
@MattBall 他的意思可能是 this.someInstance
-
这段代码会将空对象视为与其他任何对象相同。可能不是最一致的排序方式。
-
您不需要在 compareTo 中“创新”,也就是重新发明*。如果您使用 IDE,它可能会帮您选择要使用的变量。否则考虑使用 Guava 的比较链。但是,如果您对自己的实现感到满意,我会去掉那些其他的以获得更整洁的代码。
-
这应该是 compareTo(Tok o),没有演员表
标签: java compare comparator