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) ....
答案 0 :(得分:8)
如果它是静态的,怎么可能被称为多态? Comparator
的要点是你可以将实例传递给类似sort
的东西......然后必须在比较器实例上调用compare方法
如果一个类能够将本身的一个实例与另一个实例进行比较,那么它应该实现Comparable
,所以你要写:
if (o1.compareTo(o2))
答案 1 :(得分:2)
您的问题表明对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
是一个接口,接口不能有静态方法。为什么?嗯,这对他们没有意义。接口是关于定义合同,但不提供实现。
答案 2 :(得分:1)
除非有空指针,否则John的答案很好。如果要支持空指针,可以选择在某些Util类
上定义静态方法/* some code witch $chat entity */
$chat->addUser($user);
// saving
$user->removeFromChats($chat);
$this->getEntityManager()->persist($user);
$this->getEntityManager()->flush();