2012-04-17 62 views
0

我有一個TimeParameter類,它實際上並不是Date的子類,但是由Date和其他事物組成。在我的情況下,日期或相當頻繁地代表雙打(朱利安日期)。非常頻繁地,TimeParameter不是與TimeParameter進行比較,而是與Date,Double或甚至String(使用預定義格式編碼的日期)進行比較。原來,TimeParameter實現Comparable接口,並且在的compareTo(對象o)使用鄰叉進一步Java:與兩種或更多類型的對象相比,可與泛型類似的實現

if (o instanceof Date) 
    return compareToDate((Date)o); 
else if (o instanceof Double) 
    return compareToDouble((Double)o); 
else ... 

一種可能這樣做與仿製藥將涉及使用一個輔助類像

CompareHelper(Double d) { 
    jd = d; 
    ... 
} 
CompareHelper(Date d) { 
    jd = getJulianDate(d); 
    ... 
} 

然後,使TimeParameter實現Comparable <CompareHelper>並繼續。

但我的問題是,是否有辦法做到這一點在泛型沒有輔助類作爲調用實例並不總是能夠知道它應該將日期/雙重包裝到輔助實例中。

在此先感謝

+0

我正確的說,無論TimeParameter存儲的時間如何,它應該可以與任何其他類型的時間規格(Date,Double,String)相比?如果是這樣,我認爲你的第一個(非通用)實施是最好的。 – 2012-04-17 12:27:54

+0

一些事情:首先,你的CompareHelper不是一個泛型類 - 相反,它是另一個時間類從其他時間類轉換爲標準時間類(jd),我不確定泛型是否是正確的解決方案。其次,隨着解決方案的推出,解決方案的實例並不差(可能不雅,但不壞)。第三,當你有多種方式來表示代碼中使用的相同信息(時間/日期)時,這表明(對我而言)有些臭味 - 在這方面,我可能會建議你看看最近的嘗試來處理Java中的日期/時間:例如jodaTime或jsr310 – amaidment 2012-04-17 12:35:39

回答

2

通常所有類型都有一個通用接口,它們都實現。與許多沒有共同點的東西相比,這是沒有意義的。 (b)== -b.compareTo(a)意味着你不能用你想要的類型過於複雜。