Java: общее наследование / приведение (ResourceBundle) - PullRequest
0 голосов
/ 17 августа 2011

Я получаю некоторые исключения CastClassException.Я думаю, что мое понимание подклассов в замешательстве и может использовать некоторые уточнения.У меня есть следующие классы:

// 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

Я бы хотел получить ключи от bundle , переведя его в ResourceBundleWrapper.Я не могу привести пакет к типу ResourceBundleWrapper без получения ClassCastException.Пример сообщения об ошибке:

java.util.PropertyResourceBundle cannot be cast to com.common.ResourceBundleWrapper    

Я понимаю, почему происходит это исключение приведения.Это не то, что мне нужно уточнить.Как мне достичь того, чего я пытаюсь достичь с помощью этого подхода?

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

PropertyResourceBundle и ResourceBundleWrapper являются потомками ResourceBudle, поэтому каждый из них может выполнять работу ResourceBundle.Однако нет оснований предполагать, что они заменяют друг друга.Таким образом, приведенный вами акт является недействительным.

Не могли бы вы вместо того, чтобы PropertyResourceBundle расширили ResourceBundleWrapper?Тогда ваш класс может воспользоваться дополнительными возможностями оболочки.

0 голосов
/ 17 августа 2011

PropertyResourceBundle и ResourceBundleWrapper являются ResourceBundeles. Спасибо за класс, в котором есть родительский фрукт, а в качестве дочерних классов - манго и киви. Манго не киви :) и киви не манго, но оба являются фруктами:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...