Ste*_*ess 9 java compare comparator
之前有人问过,但我没有找到一个体面的实施解释.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我读了两个我发现的类似问题; 他们坚持要实施另一种方法.我不明白为什么这不起作用.该方法获取一个额外的对象,它检查它是否是一个有效的实例,或者null,如果null只是返回0; 什么是最简单的实现null-safe的方法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;
}
}
Run Code Online (Sandbox Code Playgroud)
这不是最佳实现,应该看看好人们在这里发布的答案.对于我的特殊情况,这是足够好的,因为它永远不会为null,但是接收的对象可以为null,并且如果任一个为null,则初始实现状态返回0.因此,如果给定的对象为null,则返回0.
Mat*_*all 12
就个人而言,我喜欢Guava的Ordering无效安全比较.您可以指定#nullsFirst()或#nullsLast()避免使用NullPointerExceptions.
其他重要说明,主要来自评论:
this是从来没有 null在Java中ComparisonChaincompareTo()实现时Comparable,请务必指定type参数,以便获得编译时类型安全性,而不必使用instanceof或强制转换:
class Tok implements Comparable<Tok> {
// snip
public int compareTo(Tok other) {
// snip
}
}
Run Code Online (Sandbox Code Playgroud)返回0意味着this并且o是相等的,如果o为null 则不是真的.此外,this永远不会为空.
当然,这取决于应用程序.您可能希望拥有一个等于null的对象.你返回的内容取决于你,但是如果你正在寻找一种通用的零安全方法,那它并不是很理想.
为了完全通用,我会检查是否o是null,如果是,则抛出某种异常.
| 归档时间: |
|
| 查看次数: |
16931 次 |
| 最近记录: |