Java-compareTo和运算符
如果我有一个类Java-compareTo和运算符,java,operators,comparable,compareto,Java,Operators,Comparable,Compareto,如果我有一个类Person,它实现了Comparable(例如,将personA.height与personB.height进行比较),是否可以使用 personA < personB 这样做有什么问题吗?或者我需要让操作员超负荷工作吗 不,不可能使用personA
Person
,它实现了Comparable
(例如,将personA.height
与personB.height
进行比较),是否可以使用
personA < personB
这样做有什么问题吗?或者我需要让操作员超负荷工作吗 不,不可能使用
personA
作为替代品。在Java中不能重载运算符
另外,我建议你换衣服
personA.compareTo(personB) == -1
到
personA.compareTo(personB)<0
你现在所拥有的可能对你的班级有用。但是,上的约定是,当
personA
小于personB
时,它返回负值。该负值不必为-1,如果与其他类一起使用,代码可能会中断。如果有人将类的compareTo()
方法更改为另一个(但仍然兼容)实现,它也可能会中断。Java中没有运算符重载。你可能来自C++背景。
您必须使用
compareTo
方法。Java没有运算符重载1,因此,是的,存在一个问题:这是不可能的
1当然,内置了一些重载:
+
运算符处理整数类型、浮点类型和字符串。但是你不能定义你自己的;Java不支持操作符重载(除了内置的重载)
顺便说一下,您应该编写<0
,而不是编写=-1
compareTo
只需要返回一个负值/零值/正值,而不是具体的-1/0/1。不,不可能使用“它,java不会给您运算符重载。
但一个更加面向对象的选项是在person中添加一个方法
public boolean isTallerThan(Person anotherPerson){
return this.compareTo(anotherPerson) > 0;
}
因此,与其写作
if(personA.compareTo(personB) > 0){
}
你可以写
if(personA.isTallerThan(personB)){
}
IMHO更具可读性,因为它隐藏了细节,并且用域语言而不是java细节来表示
personA.compareTo(personB) < 0
public boolean isTallerThan(Person anotherPerson){
return this.compareTo(anotherPerson) > 0;
}
if(personA.compareTo(personB) > 0){
}
if(personA.isTallerThan(personB)){
}