【发布时间】:2013-06-21 17:56:16
【问题描述】:
对不起,我是真正的 Java 初学者,所以这个问题可能已经有了答案,但我没能找到。 我想做一些等效的事情(我已经知道你实际上不能重载运算符):
bool operator < (MyClass a, MyClass b) {/*code*/}
这样做需要什么语法,我在哪里定义这个操作?
【问题讨论】:
标签: java operators overloading
对不起,我是真正的 Java 初学者,所以这个问题可能已经有了答案,但我没能找到。 我想做一些等效的事情(我已经知道你实际上不能重载运算符):
bool operator < (MyClass a, MyClass b) {/*code*/}
这样做需要什么语法,我在哪里定义这个操作?
【问题讨论】:
标签: java operators overloading
有MyClass实现Comparable:
class MyClass implements Comparable<MyClass> {
public int compareTo(MyClass other) {
// returns a negative number if this < other, 0 if this == other,
// a positive number if this > other
}
}
然后说a < b,写a.compareTo(b) < 0。
或者,为了强加一个“外部排序”,写一个Comparator:
Comparator<MyClass> comparator = new Comparator<MyClass>() {
public int compare(MyClass a, MyClass b) {
// same rules
}
};
然后做comparator.compare(a, b) < 0。
【讨论】:
如果要检查是否相等,则需要覆盖 MyClass 中的 equals() 和 hashCode() 。然后你可以检查为a.equals(b)。
如果你想比较它们,那么你可以在MyClass 中实现Comparable。
如果您想根据不同的字段进行比较,请写一个Comparator。
【讨论】:
java 不支持您想要的运算符重载。您可以创建一个方法来比较对象的特定值。
【讨论】:
在 Java 中有两个这样的接口:Comparable 和 Comparator。
Comparable 用于将this 与另一个对象进行比较,而Comparator 用于比较其他两个对象。
【讨论】:
您将不得不实施比较方法。这应该通过实现Comparable 来完成。
public class MyClass implements Comparable
{
public int compareTo(Object o)
{
// Compare code
}
}
如果对象相同(例如,“myString”和“myString”),此方法必须返回 0,如果此对象小于我们要与之比较的对象(例如,“aaa”),则该方法必须返回负数和“bbb”),如果此对象大于我们要与之比较的对象(例如,“ccc”和“bbb”),则为正数。
请注意,负数和正数不一定是,也不应该被期望为一或负数。它必须是消极的或积极的。例如,我们可以返回一个偏移量,它可以更具体地告诉我们两个对象如何比较。
【讨论】: