int compare(Object o1,Object o2)比较其两个参数的顺序。
对于比较2个对象,o1和o2需要这样做:
MyClass o1=new MyClass();
MyClass o2=new MyClass();
if (o1.compare(o1,o2)>0) ......为什么这种方法不是静态的?如果方法是静态的,可能如下所示:
if (MyClass.compare(o1,o2)>0) ....发布于 2011-07-26 22:30:36
如果它是静态的,那么如何以多态方式调用它呢?Comparator的要点是,您可以将实例传递到类似于sort的东西中……然后它必须调用比较器实例上的compare方法。
如果一个类能够将其自身的一个实例与另一个实例进行比较,那么它应该实现Comparable,所以您可以这样写:
if (o1.compareTo(o2))发布于 2011-07-26 22:50:25
你的问题表明你对Comparable和Comparator缺乏了解。
Comparator能够比较两个其他对象;
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
MyComparator c1 = new MyComparator();
if (c1.compare(o1, o2) > 0) {
...
}Comparable的东西是可以与其他物体进行比较的;
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
if (o1.compareTo(o2)) > 0) {
...
}比较一个比较器是很少见的,所以你的例子;
if (o1.compare(o1, o2) > 0) {
...
}这真的没什么意义。不管怎样,问题的答案是,为什么compareTo()不是静态的?基本上,Comparator是一个接口,接口不能有静态方法。为什么?好吧,这对他们来说没什么意义。接口就是定义一个契约,但不提供实现。
发布于 2015-05-05 15:45:34
John的答案是好的,除非空指针是可能的。如果希望支持空指针,可以选择在某个Util类上定义静态方法
// null pointers first
public static int compareTo(@Nullable Comparable v1, @Nullable Comparable v2)
{
return v1 == null ? (v2 == null ? 0 : -1) : v2 == null ? 1 : v1.compareTo(v2);
}
// null pointers last
public static int compareTo(@Nullable Comparable v1, @Nullable Comparable v2)
{
return v1 == null ? (v2 == null ? 0 : 1) : v2 == null ? -1 : v1.compareTo(v2);
}https://stackoverflow.com/questions/6831616
复制相似问题