如果我有一个Person
实现的类Comparable
(例如,与 相比personA.height
)personB.height
,是否可以使用
personA < personB
作为替代品
personA.compareTo(personB) == -1?
这样做有什么问题还是我需要重载运算符?
如果我有一个Person
实现的类Comparable
(例如,与 相比personA.height
)personB.height
,是否可以使用
personA < personB
作为替代品
personA.compareTo(personB) == -1?
这样做有什么问题还是我需要重载运算符?
不,不可能personA < personB
用作替代品。而且你不能在 Java 中重载运算符。
另外,我建议更改
personA.compareTo(personB) == -1
到
personA.compareTo(personB) < 0
你现在拥有的可能对你的班级有用。但是,合约 oncompareTo()
是它在小于时返回负值。该负值不必为 -1,如果与不同的类一起使用,您的代码可能会中断。如果有人将您的类的方法更改为不同的——但仍然兼容的——实现,它也可能会中断。personA
personB
compareTo()
Java 中没有运算符重载。您可能来自 C++ 背景。
你必须使用compareTo
方法。
这是不可能的,不;并且 Java 不支持运算符重载(除了内置重载)。
顺便说一句,== -1
你应该写而不是写< 0
。compareTo
只需要返回负/零/正值,而不是-1/0/1。
这是不可能的,java 不会给你操作符重载。
但是更多的 OO 选项是在 person 内部添加一个方法
public boolean isTallerThan(Person anotherPerson){
return this.compareTo(anotherPerson) > 0;
}
所以而不是写
if(personA.compareTo(personB) > 0){
}
你可以写
if(personA.isTallerThan(personB)){
}
恕我直言,它更具可读性,因为它隐藏了细节,并且用领域语言而不是 java 细节来表达。
Java 没有运算符重载1,所以,是的,有一个问题:这是不可能的。
1当然,有一些内置的重载:+
运算符适用于整数类型、浮点类型和String
s。但是你不能定义你自己的。
不,“<”应用于对象时不会编译。另外,请注意您的测试:
personA.compareTo(personB)==-1
API 文档只是说当对象小于指定对象时 compareTo() 返回一个负整数,不一定是-1。采用
personA.compareTo(personB) < 0
反而。