2011-08-16 63 views
1

说我有ResourceBundle的一些实例:的Java:子类资源包

ResourceBundle bundle = getBundle(); 
... 
    some more code that does stuff with bundle 
... 

我想知道,如果有一个特定的键。不幸的是,我将使用的所有方法(containsKey(),keySet()等)检查密钥的父包。我想要使​​用的方法是handleKeySet(),它受到保护,因此不可见。要解决此问题,我唯一能想到的解决方案是创建ResourceBundle的子类并实现getKeys(),使其仅返回当前包的键并排除父项的键。我开始怀疑这个解决方案的部分可能是由于我对继承的理解混淆。我的问题是......这似乎是正确的路要走吗?如果是这样,任何暗示或推动正确的方向将不胜感激。

回答

1

理论上讲,当你创建一个子类时,你不会改变继承的行为,你所做的就是通过使它更加具体到你的需求来“改善”它。

例如,您可以将GregorianCalendar扩展为MyGregCal,以便使用它计算与给定日期相对应的黄道符号。但是,为了计算朱利安日历,你应该避免改变它。为什么?因为接受GregorianCalendar的每种方法都会接受MyGregCal,并且会期望它提供GregorianCalendar的功能。如果没有,那么糟糕的事情(更糟糕的是,意想不到的坏事)可以发生在任何地方。

因此,如果在不破坏父类的contract的情况下无法获得所需的功能,则应该查找其他位置。从零开始编写班级,或从简单的父级班级编写班级(Properties?)