使用Java中的"<"或">"运算符比较两个对象

Iva*_*anN 14 java operator-overloading object comparable

如何使用"<"或">"将Java中的两个对象进行比较,例如

MyObject<String> obj1= new MyObject<String>(“blablabla”, 25);
MyObject<String> obj2= new MyObject<String>(“nannaanana”, 17);
if (obj1 > obj2) 
    do something. 
Run Code Online (Sandbox Code Playgroud)

我把MyObject类标题设为

public class MyObject<T extends Comparable<T>> implements Comparable<MyObject<T>> 并且创建了方法Comp但是我获得的所有增益现在我可以在对象列表上使用"sort",但是如何直接比较两个对象?是

if(obj1.compareTo(obj2) > 0)
     do something
Run Code Online (Sandbox Code Playgroud)

唯一的办法?

And*_*ira 17

您无法在Java中执行运算符重载.这意味着你无法定义特定行为的运营商,如+,>,<,==,等在自己的类.

正如您已经指出的那样,在这种情况下,实现Comparable和使用该compareTo()方法可能就是这样.

另一种选择是创建一个Comparator(参见文档),特别是如果它对实现类没有意义,Comparable或者你需要以不同的方式比较来自同一个类的对象.

为了提高代码可读性,您可以使用compareTo()看起来更自然的自定义方法.例如:

boolean isGreaterThan(MyObject<T> that) {
    return this.compareTo(that) > 0;
}

boolean isLessThan(MyObject<T> that) {
    return this.compareTo(that) < 0;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它们:

if (obj1.isGreaterThan(obj2)) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)