2010-09-20 105 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实例。

此外,请注意提示扩展日历的答案是一个坏主意。