Java接口比较器静态比较
int比较(对象o1、对象o2) 比较其两个参数的顺序 要比较两个对象o1和o2,需要执行以下操作:Java接口比较器静态比较,java,static,comparator,Java,Static,Comparator,int比较(对象o1、对象o2) 比较其两个参数的顺序 要比较两个对象o1和o2,需要执行以下操作: MyClass o1=new MyClass(); MyClass o2=new MyClass(); if (o1.compare(o1,o2)>0) ...... 为什么这个方法不是静态的? 如果方法是静态的,则可以如下所示: if (MyClass.compare(o1,o2)>0) .... 如果它是静态的,它怎么能被多态地调用呢?Comparator的要点是,您可
MyClass o1=new MyClass();
MyClass o2=new MyClass();
if (o1.compare(o1,o2)>0) ......
为什么这个方法不是静态的?
如果方法是静态的,则可以如下所示:
if (MyClass.compare(o1,o2)>0) ....
如果它是静态的,它怎么能被多态地调用呢?
Comparator
的要点是,您可以将实例传递到类似于sort
。。。然后必须在比较器实例上调用compare方法
如果一个类能够将自身的一个实例与另一个实例进行比较,那么它应该实现Comparable
,因此您可以编写:
if (o1.compareTo(o2))
您的问题表明对
可比
和比较器
缺乏了解
比较器
能够比较其他两个对象
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
MyComparator c1 = new MyComparator();
if (c1.compare(o1, o2) > 0) {
...
}
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
if (o1.compareTo(o2)) > 0) {
...
}
具有可比性的事物能够与其他物体相比较
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
MyComparator c1 = new MyComparator();
if (c1.compare(o1, o2) > 0) {
...
}
MyClass o1 = new MyClass();
MyClass o2 = new MyClass();
if (o1.compareTo(o2)) > 0) {
...
}
比较一个比较器是非常罕见的,所以你的例子
if (o1.compare(o1, o2) > 0) {
...
}
没什么意义。不管怎样,答案是,为什么不是静态的?基本上,
Comparator
是一个接口,接口不能有静态方法。为什么?嗯,这对他们来说没有意义。接口是关于定义契约的,但不提供实现。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);
}
乔恩的回答是对的,但你的观点很好。从理论上讲,如果每个可比较的类都有一个静态的“compare”方法,那么这将非常方便,但是没有办法通过接口来强制实现。