Java Interface Comparator静态比较

时间:2011-07-26 14:29:08

标签: java static comparator

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) ....

3 个答案:

答案 0 :(得分:8)

如果它是静态的,怎么可能被称为多态? Comparator的要点是你可以将实例传递给类似sort的东西......然后必须在比较器实例上调用compare方法

如果一个类能够将本身的一个实例与另一个实例进行比较,那么它应该实现Comparable,所以你要写:

if (o1.compareTo(o2))

答案 1 :(得分:2)

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

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是一个接口,接口不能有静态方法。为什么?嗯,这对他们没有意义。接口是关于定义合同,但不提供实现。

答案 2 :(得分:1)

除非有空指针,否则John的答案很好。如果要支持空指针,可以选择在某些Util类

上定义静态方法
/* some code witch $chat entity */
$chat->addUser($user);

// saving
$user->removeFromChats($chat);
$this->getEntityManager()->persist($user);
$this->getEntityManager()->flush();