簡體   English   中英

Java:通用繼承/鑄造(ResourceBundle)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM