簡體   English   中英

重載未按預期運行

[英]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 的TreeMapTreeSet使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM