重载未按预期运行
Overloading not behaving as expected
我正在制作一家酒店,我的客户以树形结构存储,以便于搜索。
我的 Client
class 有两个 compareTo
方法。一种是将 Client
与另一个 Client
进行比较,另一种是将其与 int
进行比较。 Client
应该是 Comparable
类型,因为它位于实现 Comparable
.
的树结构中
//compare Client to int
public int compareTo(int arg0) {
int result = this.clientId.compareTo(arg0);
return result;
}
//compare Client to object
public int compareTo(Object o) {
return (this.clientId).compareTo(((Client)o).clientId);
}
但是没有达到预期的效果。每次调用此函数时,它都会使用 compareTo(Object)
方法和 returns 错误,即我的 int
无法转换为 Client
。我想这是因为 Object
是 int
(?) 的超级 class 但不太清楚如何修复它。我尝试解决这个问题,但似乎无法在不更改我的整个代码的情况下解决它。
Java 的 TreeMap
和 TreeSet
使用 compareTo(T)
方法(即,对于您似乎正在使用的原始类型,compareTo(Object)
,所以你的重载方法被忽略了。
虽然您当然可以重载 compareTo
方法,但您不能强制 Java 的数据结构使用它。
一种可能的方法是让 compareTo(Object)
方法动态检查类型:
//compare Client to object
public int compareTo(Object o) {
Integer toCompare;
if (o instanceof Client) {
toCompare = ((Client) o).clientId;
} else if (o instanceof Integer) {
toCompare = (Integer) o;
} else {
throw new IllegalArgumentException();
}
return (this.clientId).compareTo(toCompare);
}
我正在制作一家酒店,我的客户以树形结构存储,以便于搜索。
我的 Client
class 有两个 compareTo
方法。一种是将 Client
与另一个 Client
进行比较,另一种是将其与 int
进行比较。 Client
应该是 Comparable
类型,因为它位于实现 Comparable
.
//compare Client to int
public int compareTo(int arg0) {
int result = this.clientId.compareTo(arg0);
return result;
}
//compare Client to object
public int compareTo(Object o) {
return (this.clientId).compareTo(((Client)o).clientId);
}
但是没有达到预期的效果。每次调用此函数时,它都会使用 compareTo(Object)
方法和 returns 错误,即我的 int
无法转换为 Client
。我想这是因为 Object
是 int
(?) 的超级 class 但不太清楚如何修复它。我尝试解决这个问题,但似乎无法在不更改我的整个代码的情况下解决它。
Java 的 TreeMap
和 TreeSet
使用 compareTo(T)
方法(即,对于您似乎正在使用的原始类型,compareTo(Object)
,所以你的重载方法被忽略了。
虽然您当然可以重载 compareTo
方法,但您不能强制 Java 的数据结构使用它。
一种可能的方法是让 compareTo(Object)
方法动态检查类型:
//compare Client to object
public int compareTo(Object o) {
Integer toCompare;
if (o instanceof Client) {
toCompare = ((Client) o).clientId;
} else if (o instanceof Integer) {
toCompare = (Integer) o;
} else {
throw new IllegalArgumentException();
}
return (this.clientId).compareTo(toCompare);
}