说我有一些ResourceBundle实例:
ResourceBundle bundle = getBundle();
...
some more code that does stuff with bundle
...
我想知道 bundle 是否有特定的密钥。不幸的是,我将使用的所有方法(containsKey(),keySet()等)还检查父包的密钥。我想要使用的方法是handleKeySet(),它受到保护,因此不可见。为了解决这个问题,我能想到的唯一解决方案是创建ResourceBundle的子类并实现getKeys(),使其仅返回当前捆绑的密钥并排除了父亲的密钥。我开始怀疑这个解决方案的部分可能是由于我对继承的困惑。我的问题是......这似乎是正确的方法吗?如果是这样,任何提示或正确方向的推动都将受到赞赏。
答案 0 :(得分:1)
理论上,当你创建一个子类时,你不会改变继承的行为,你所做的就是通过使它更具体地满足你的需要来“改进”它。
例如,您可以将GregorianCalendar扩展为MyGregCal,以便使用它来计算与给定日期对应的黄道带标志。但你应该避免改变它,以便计算朱利安日历。为什么?因为接受GregorianCalendar的每个方法都会接受MyGregCal,并且期望它提供GregorianCalendar的功能。如果没有,那么坏事(更糟糕的是,意外的坏事)可能随处可见。
因此,如果在不破坏父类的contract
的情况下无法获得所需的功能,则应该查看其他位置。从头开始编写类,或从更简单的父类(Properties
?)