如何在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但我获得的所有收益现在我可以使用&#34; sort&#34;在对象列表上,但如何直接比较两个对象?是
if(obj1.compareTo(obj2) > 0)
do something
唯一的方法?
答案 0 :(得分:15)
您无法在Java中执行运算符重载。这意味着您无法在自己的类中为+
,>
,<
,==
等运算符定义自定义行为。
正如您已经指出的那样,在这种情况下,实施Comparable
并使用compareTo()
方法可能就是这样。
另一种选择是创建Comparator
(请参阅docs),特别是如果对于实施Comparable
的课程没有意义,或者您需要进行比较来自同一类的对象以不同的方式。
为了提高代码可读性,您可以将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
}
答案 1 :(得分:3)
使用Comparable.compareTo(T)
是唯一的选择(或Comparator
)。接口仅定义一个方法(Comparator
添加equals
),并且将此对象与指定的对象进行比较以进行排序。此外,Java不允许运算符重载(所以你不能直接改变用于调用该方法的操作数;或者实际上修改了接口。)
答案 2 :(得分:1)
这不是唯一的方法。您也可以实现Comparator。比较者使用compare()
方法反对使用Comparable
方法的compareTo()
。
您无法使用>
或<
直接比较对象的原因是因为Java不知道您要将哪个变量用于比较(因为可能存在)对象中有多个变量。)
为了比较对象,这些对象必须具有可比性。您需要定义并告诉Java如何比较它们。
Java集合提供了sort
方法。然而,有些学校确实要求您编写自己的排序方法,最终仍然使用compareTo()
进行比较。
您可以在此处查看Comparable
与Comparator
之间的微妙差异:What is the difference between compare() and compareTo()?
我认为值得一提的是,默认情况下,如果您没有覆盖compareTo()
方法,Java会按字典顺序比较字符串(对象)。