首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java接口比较器静态比较

Java接口比较器静态比较
EN

Stack Overflow用户
提问于 2011-07-26 22:29:08
回答 3查看 6.5K关注 0票数 5

int compare(Object o1,Object o2)比较其两个参数的顺序。

对于比较2个对象,o1和o2需要这样做:

代码语言:javascript
复制
MyClass o1=new MyClass();
MyClass o2=new MyClass();

 if (o1.compare(o1,o2)>0) ......

为什么这种方法不是静态的?如果方法是静态的,可能如下所示:

代码语言:javascript
复制
 if (MyClass.compare(o1,o2)>0) ....
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-26 22:30:36

如果它是静态的,那么如何以多态方式调用它呢?Comparator的要点是,您可以将实例传递到类似于sort的东西中……然后它必须调用比较器实例上的compare方法。

如果一个类能够将其自身的一个实例与另一个实例进行比较,那么它应该实现Comparable,所以您可以这样写:

代码语言:javascript
复制
if (o1.compareTo(o2))
票数 8
EN

Stack Overflow用户

发布于 2011-07-26 22:50:25

你的问题表明你对ComparableComparator缺乏了解。

Comparator能够比较两个其他对象;

代码语言:javascript
复制
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
MyComparator c1 = new MyComparator();

if (c1.compare(o1, o2) > 0) {
  ...
}

Comparable的东西是可以与其他物体进行比较的;

代码语言:javascript
复制
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();

if (o1.compareTo(o2)) > 0) {
  ...
}

比较一个比较器是很少见的,所以你的例子;

代码语言:javascript
复制
if (o1.compare(o1, o2) > 0) {
  ...
}

这真的没什么意义。不管怎样,问题的答案是,为什么compareTo()不是静态的?基本上,Comparator是一个接口,接口不能有静态方法。为什么?好吧,这对他们来说没什么意义。接口就是定义一个契约,但不提供实现。

票数 2
EN

Stack Overflow用户

发布于 2015-05-05 15:45:34

John的答案是好的,除非空指针是可能的。如果希望支持空指针,可以选择在某个Util类上定义静态方法

代码语言:javascript
复制
// 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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6831616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档