2012-01-20 19 views
8

如果我有一个类Person实现Comparable(比较personA.heightpersonB.height,例如),是有可能使用爪哇 - 的compareTo和运营商

personA < personB 

作为替代

personA.compareTo(personB) == -1? 

这样做有什么问题吗?还是我需要重载操作员?

回答

6

在Java中没有运算符重载。您可能来自C++背景。您需要使用compareTo方法。

14

不,不可能使用personA < personB作为替代品。你不能在Java中重载运算符。

另外,我建议你改变

personA.compareTo(personB) == -1 

personA.compareTo(personB) < 0 

你现在有什么可能适用于你的班级。然而,compareTo()上的合同是当personA小于personB时,它返回负值。该负值不一定是-1,如果与不同的类一起使用,代码可能会中断。如果有人将您的班级的compareTo()方法更改为其他 - 但仍然符合规定的实施方法,它也可能会中断。

1

Java没有运算符重载,所以,是的,有一个问题:这是不可能的。


有,当然,建于少数超载:对+操作符对整型,浮点型,并在String秒。但是你不能定义你自己的。

5

这是不可能的,不;而且Java不支持运算符重载(除了内置的重载)。

顺便说一句,而不是写== -1,你应该写< 0compareTo只是返回一个负值/零/正值,而不是-1/0/1。

1

不,“<”在应用于对象时不会编译。此外,小心你的测试:

personA.compareTo(personB)==-1 

API文档只是说的compareTo()时,对象是不到指定的对象,这并不一定是-1返回一个负整数。使用

personA.compareTo(personB) < 0 

代替。

1

这是不正确的,java不会给你的操作符过载。
但是,一个更加面向对象的方法是添加一个方法内部人

public boolean isTallerThan(Person anotherPerson){ 
    return this.compareTo(anotherPerson) > 0; 
} 

因此而不是写

if(personA.compareTo(personB) > 0){ 

} 

的,你可以写

if(personA.isTallerThan(personB)){ 

} 

恕我直言,这是更具可读性,因为它隐藏细节,它用域语言而不是java特定的表达。

+0

+1我同意'isTallerThan',我就是这么想的。 –