比较运营商自定义对象java

时间:2015-04-20 07:08:29

标签: java compare operators

是否有插件支持自定义对象的比较操作?

我想用这个:

class MyTemperatureObject implements Comparable<MyTemperatureObject> {
    ...
    @Override
    public int compareTo(MyTemperatureObject object) {
       return getValue().compareTo(object.getValue());
    }
}

MyTemperatureObject a;
MyTemperatureObject b;

if (a < b){
    ...
}

这给出了编译错误:

Operator '<' cannot be applied to MyTemperatureObject

但我认为编译器可以使用 Comparable 接口来评估这一点。或者是否有可能这样做是不可能或不明智的。

我知道我可以使用compareTo函数

a.compareTo(b) < 0

但我认为这是更好的可读性/可理解性

 a < b

4 个答案:

答案 0 :(得分:4)

在Java中,<运算符只能用于数字类型。编译器将自动应用compareTo方法进行对象比较。

重写您的条件如下:

if (a.compareTo(b) < 0){ /* ... */ }

compareTo方法的语义清楚地记录在JavaDoc中,但实质上它归结为:

  

返回负整数,零或正整数作为此对象   小于,等于或大于指定的对象。

答案 1 :(得分:1)

如果你想在C ++运算符重载上做{:3}},那么它在java上就不存在了。

答案 2 :(得分:0)

您可以参考compareTo方法的文档。

  

<强>返回:       一个负整数,零或正整数,因为此对象小于,等于或大于指定的对象。

您可以使用compareTo方法。

if (a.compareTo(b) < 0){
    // Your code
}

  

运营商'&lt;'无法应用于MyTemperatureObject

答案: Java不支持运算符重载,因为C ++支持它。因此,您只能使用< / >运算符进行数值比较。

答案 3 :(得分:0)

您必须使用调用compareTo方法的特定类, 看看这个教程,希望对你有所帮助 http://www.tutorialspoint.com/java/java_using_comparator.htm