Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java接口比较器静态比较_Java_Static_Comparator - Fatal编程技术网

Java接口比较器静态比较

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的要点是,您可

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
的要点是,您可以将实例传递到类似于
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”方法,那么这将非常方便,但是没有办法通过接口来强制实现。