[英]Java: General Inheritance/Casting (ResourceBundle)
我得到了一些 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()
...
}
...
}
包裝器 class 的目的是公開 handleKeySet() 方法,以便我可以獲取包的密鑰,而無需獲取其父包的密鑰。 我大致有以下代碼:
ResourceBundle bundle = getBundle(); // method can return any subclass of ResourceBundle
by casting it to a ResourceBundleWrapper.我希望能夠通過將其轉換為 ResourceBundleWrapper 來獲取的密鑰。 如果沒有 ClassCastException,我無法將 bundle 轉換為類型 ResourceBundleWrapper。 錯誤信息示例:
java.util.PropertyResourceBundle cannot be cast to com.common.ResourceBundleWrapper
我明白為什么會發生這種演員表異常。 這不是我需要澄清的。 我如何通過這種方法實現我想要實現的目標?
PropertyResourceBundle 和 ResourceBundleWrapper 都是 ResourceBundles。 Thnik 在 class 上,它有父 Fruit 並且有 Mango 和 Kiwi 作為子類。 芒果不是獼猴桃:)獼猴桃不是芒果,但都是水果:)
PropertyResourceBundle 和 ResourceBundleWrapper 都是 ResourceBudle 的后代,因此它們都可以完成 ResourceBundle 的工作。 但是,沒有理由假設它們可以相互替代。 所以你嘗試的演員是無效的。
您可以改為讓 PropertyResourceBundle 擴展 ResourceBundleWrapper 嗎? 然后您的 class 可以從包裝器的附加功能中受益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.