在 Java 中,将两个对象与“<”或“>”运算符进行比较

如何使用“<”或“>”使Java中的两个对象具有可比性,例如

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

我已将 MyObject 类标头设置为

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

if(obj1.compareTo(obj2) > 0)
     do something

唯一的办法?


答案 1

您不能在 Java 中执行运算符重载。这意味着您无法在自己的类中为运算符(如 、 、 、 等)定义自定义行为。+><==

正如您已经注意到的,在这种情况下,实现和使用该方法可能是要走的路。ComparablecompareTo()

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

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

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

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

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

if (obj1.isGreaterThan(obj2)) {
    // do something
}

答案 2

使用Compeable.compareTo(T)是唯一的选择(或比较器)。该接口仅定义一个方法(同时添加),并将此对象与指定的订单对象进行比较。此外,Java不允许运算符重载(因此您将无法直接更改用于调用该方法的操作数;或者实际上修改接口)。Comparatorequals