用Java扩展日历

时间:2010-09-20 22:44:47

标签: java calendar

我想从java.util.Calendar向Calendar添加更多方法,但是我在使用getInstance方法时遇到了麻烦。

如果我有一个像这样的对象:
public class DateObject extends Calendar{ // other methods here }

我做DateObject mon = DateObject.getInstance(); 代码不起作用。即使我用Calendar.getInstance()替换它,我也无法将Calendar转换为我的DateObject。

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

4 个答案:

答案 0 :(得分:10)

getInstance()Calendar上的静态方法。您无法覆盖静态方法。您需要提供自己的方法。

但我会质疑扩展日历的设计。几乎可以肯定的是,让您的类包装日历而不是扩展它。特别是,更改日历实施将变得非常非常困难。

另外考虑一下,Calendar API在很多方面都非常破碎,因此对于小猫来说这将是一种犯罪行为。

您是否考虑过可能已包含所需功能的替代日期/时间/日历库?例如JodaTime

答案 1 :(得分:3)

或者,更好的是,找到像Joda这样的库,它会做你认为必要的其他操作。扩展日历的设计几乎肯定会走向糟糕的方向。

答案 2 :(得分:1)

getInstance()是一个静态/类方法。你不能。你的用例是什么?

答案 3 :(得分:0)

创建Calendar doe的子类并不意味着Calendar中现有的静态getInstance()方法会神奇地知道

一种解决方案是添加一个或多个签名的方法,如:

public static DateObject getInstance(...);

到DateObject类,并根据需要实现它以创建DateObject实例。

另一种可能性是查看现有getInstance()工厂方法的工作原理,并弄清楚如何创建它以创建一个DateObject实例。

另外,请注意那些表明扩展日历是个坏主意的答案。