我必须在Java中覆盖哪种方法才能使用">"来比较我的类的实例

Chr*_*ian 1 java

据我所知,我可以用equals()Java 覆盖来处理我的类与之交互的方式==.我必须覆盖哪种方法来定义行为

MyClass obj1;
MyClass obj2;
if (obj1 > obj2){
    ...
}
Run Code Online (Sandbox Code Playgroud)

khe*_*ood 8

你不能.Java不支持自定义运算符重载.覆盖equals不会影响==.您可以获得的最接近的<是实现Comparable接口,其中包括一个compareTo方法. http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html


Lui*_*oza 5

据我所知,我可以用Java覆盖equals()来处理我的类与==的交互方式

这是错的.这里已经解释了这个解释:我如何比较Java中的字符串?:

== 参考平等测试.

.equals() 测试价值平等.


对于你的问题:

与C++或C#不同,在Java中,您不能重载运算符.

而不是使用><运算符,你有两个选择.

  1. 制作MyClass工具Comparable:

    public MyClass implements Comparable<MyClass> {
        @Override
        public int compareTo(MyClass other) {
            //comparison logic here...
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    你会像这样使用它:

    MyClass obj1 = ...;
    MyClass obj2 = ...;
    if (obj1.compareTo(obj2) > 0){
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个实现的类 Comparator

    public class MyClassComparator implements Comparator<MyClass> {
        @Override
        public int compare(MyClass myClass1, MyClass myClass2) {
            //comparison logic here...
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    你会像这样使用它:

    MyClass obj1 = ...;
    MyClass obj2 = ...;
    MyClassComparator comp = new MyClassComparator();
    if (comp.compare(obj1, obj2) > 0){
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 但是,这不会让您使用>运算符. (2认同)