我想从java.util.Calendar向Calendar添加更多方法,但是我在使用getInstance方法时遇到了麻烦。
如果我有一个像这样的对象:
public class DateObject extends Calendar{ // other methods here }
我做DateObject mon = DateObject.getInstance();
代码不起作用。即使我用Calendar.getInstance()替换它,我也无法将Calendar转换为我的DateObject。
如何让我的DateObject使用getInstance()?
答案 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实例。
另外,请注意那些表明扩展日历是个坏主意的答案。