[英]Overloading not behaving as expected
我正在建造一家酒店,我的客戶存儲在一個樹形結構中,因此可以輕松搜索它們。
我的客戶端 class 有 2 個 compareTwo 方法。 一個用於將客戶端與另一個客戶端進行比較,另一個用於將其與 int 進行比較。 Client 應該是可比較的類型,因為它位於實現 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);
}
但它並沒有達到預期的效果。 每次調用此 function 時,它都會使用 compareTo(Object) 方法並返回無法將我的 int 強制轉換為客戶端的錯誤。 我想這是因為 Object 是 int(?) 的超類,但不太知道如何解決它。 我嘗試解決這個問題,但似乎無法在不更改我的整個代碼的情況下解決它。
謝謝你的幫助!
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.