如果我有一个类Person
实现Comparable
(比较personA.height
到personB.height
,例如),是有可能使用爪哇 - 的compareTo和运营商
personA < personB
作为替代
personA.compareTo(personB) == -1?
这样做有什么问题吗?还是我需要重载操作员?
如果我有一个类Person
实现Comparable
(比较personA.height
到personB.height
,例如),是有可能使用爪哇 - 的compareTo和运营商
personA < personB
作为替代
personA.compareTo(personB) == -1?
这样做有什么问题吗?还是我需要重载操作员?
在Java中没有运算符重载。您可能来自C++背景。您需要使用compareTo
方法。
不,不可能使用personA < personB
作为替代品。你不能在Java中重载运算符。
另外,我建议你改变
personA.compareTo(personB) == -1
到
personA.compareTo(personB) < 0
你现在有什么可能适用于你的班级。然而,compareTo()
上的合同是当personA
小于personB
时,它返回负值。该负值不一定是-1,如果与不同的类一起使用,代码可能会中断。如果有人将您的班级的compareTo()
方法更改为其他 - 但仍然符合规定的实施方法,它也可能会中断。
Java没有运算符重载,所以,是的,有一个问题:这是不可能的。
有,当然,建于少数超载:对+
操作符对整型,浮点型,并在String
秒。但是你不能定义你自己的。
这是不可能的,不;而且Java不支持运算符重载(除了内置的重载)。
顺便说一句,而不是写== -1
,你应该写< 0
。 compareTo
只是返回一个负值/零/正值,而不是-1/0/1。
不,“<”在应用于对象时不会编译。此外,小心你的测试:
personA.compareTo(personB)==-1
API文档只是说的compareTo()时,对象是不到指定的对象,这并不一定是-1返回一个负整数。使用
personA.compareTo(personB) < 0
代替。
这是不正确的,java不会给你的操作符过载。
但是,一个更加面向对象的方法是添加一个方法内部人
public boolean isTallerThan(Person anotherPerson){
return this.compareTo(anotherPerson) > 0;
}
因此而不是写
if(personA.compareTo(personB) > 0){
}
的,你可以写
if(personA.isTallerThan(personB)){
}
恕我直言,这是更具可读性,因为它隐藏细节,它用域语言而不是java特定的表达。
+1我同意'isTallerThan',我就是这么想的。 –