我得到一些CastClassExceptions。我认为我对子类化的理解很困惑,可以使用一些澄清。我有以下课程:
// defined in java.util
abstract class ResourceBundle {
...
}
// defined in java.util
class PropertyResourceBundle extends ResourceBundle {
...
}
// defined by myself
class ResourceBundleWrapper extends ResourceBundle {
...
// abstract in ResourceBundle
@Override public Enumeration<String> getKeys() {
throw new UnsupportedOperationException();
}
// abstract in ResourceBundle
@Override protected Object handleGetObject(String key) {
throw new UnsupportedOperationException();
}
// protected in ResourceBundle
public Set<String> handleKeySet() {
...
the code from ResourceBundle.handleKeySet()
...
}
...
}
包装器类的目的是公开handleKeySet()方法,这样我就可以获得包的密钥而不需要获取其父包的密钥。 我大致有以下代码:
ResourceBundle bundle = getBundle(); // method can return any subclass of ResourceBundle
我希望能够通过将其转换为ResourceBundleWrapper来获取 bundle 的密钥。我不能在没有获得ClassCastException的情况下将bundle转换为类型ResourceBundleWrapper。示例错误消息:
java.util.PropertyResourceBundle cannot be cast to com.common.ResourceBundleWrapper
我理解为什么会发生这种强制转换异常。这不是我需要澄清的。如何通过这种方法实现我想要实现的目标?
答案 0 :(得分:0)
PropertyResourceBundle和ResourceBundleWrapper都是ResourceBundeles。 Thnik是一个有父母水果的班级,有芒果和猕猴桃作为儿童班。 芒果不是奇异果:)而且奇异果不是芒果,但两者都是水果:)
答案 1 :(得分:0)
PropertyResourceBundle和ResourceBundleWrapper都是ResourceBudle的后代,因此每个人都可以执行ResourceBundle的工作。然而,没有理由认为他们的替代品 彼此。所以你正在尝试的演员阵容无效。
你能让PropertyResourceBundle扩展ResourceBundleWrapper吗?然后,您的类可以从包装器的其他功能中受益。