【问题标题】:Java: General Inheritance/Casting (ResourceBundle)Java:通用继承/转换(ResourceBundle)
【发布时间】:2011-08-17 17:30:51
【问题描述】:

我收到了一些 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    

我明白为什么会发生这种演员表异常。这不是我需要澄清的。我如何通过这种方法实现我想要实现的目标?

【问题讨论】:

    标签: java inheritance subclassing resourcebundle


    【解决方案1】:

    PropertyResourceBundle 和 ResourceBundleWrapper 都是 ResourceBudle 的后代,因此它们都可以完成 ResourceBundle 的工作。但是,没有理由假设它们可以替代 彼此。所以你尝试的演员是无效的。

    您能否改为让 PropertyResourceBundle 扩展 ResourceBundleWrapper?然后你的类可以从包装器的额外功能中受益。

    【讨论】:

    • 不,我不能。 PropertyResourceBundle 不是我自己的课程。它在 java.util 中定义。此外,就像我说的,getBundle() 可以返回 ResourceBundle 的任何子类,因此我们不能指望该对象是 PropertyResourceBundle 类型。
    【解决方案2】:

    PropertyResourceBundle 和 ResourceBundleWrapper 都是 ResourceBundle。 Thnik 在一个有父 Fruit 并且有 Mango 和 Kiwi 作为子类的类上。 芒果不是猕猴桃 :) 猕猴桃不是芒果,但两者都是水果 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2013-10-16
      相关资源
      最近更新 更多