2010-09-20 108 views
0

我想從java.util.Calendar向日歷添加更多方法,但是我在使用getInstance方法時遇到了問題。在Java中擴展日曆

如果我有喜歡的對象:
public class DateObject extends Calendar{ // other methods here }

我做DateObject mon = DateObject.getInstance(); 的代碼不能正常工作。即使我用Calendar.getInstance()替換它,我也無法將日曆轉換爲我的DateObject。

如何讓我的DateObject使用getInstance()?

+0

由於Date作爲類的存在,DateObject也是一個糟糕的名字。 – 2010-09-20 23:46:25

回答

9

getInstance()Calendar上的靜態方法。您無法重寫靜態方法。你需要提供你自己的方法。

但我會質疑擴展日曆的設計。你幾乎可以肯定會讓你的課程包裝一個日曆而不是擴展它,從而更好地服務於你。尤其是,更改您的日曆實施將變得非常非常困難。

還要考慮到Calendar API在很多方面都非常糟糕,所以永久化它對於嬰兒小貓來說是一種犯罪。

您是否考慮過可能已包含所需功能的替代日期/時間/日曆庫?例如JodaTime

1

getInstance()是一個靜態/類方法。你不能。你的用例是什麼?

3

或者,更好的是,找到像喬達這樣的圖書館,它可以做任何您認爲必要的額外操作。延續Calendar的設計幾乎肯定會導致糟糕的方向。

0

創建日曆母鹿的子類,並不意味着在日曆中的現有靜態getInstance()方法會奇蹟般地知道

一種解決方案是添加一種或多種方法與類似的簽名:

public static DateObject getInstance(...); 

到DateObject類,並根據需要實現它以創建DateObject實例。

另一種可能性是查看現有的工廠方法是如何工作的,並找出如何讓它創建一個DateObject實例。

此外,請注意提示擴展日曆的答案是一個壞主意。