Я пишу программу с большим количеством перечислений, и мне нужно вернуть набор ключей EnumMap. Но EnumMap.keySet() возвращает Set(), поэтому, чтобы получить EnumSet, я хочу использовать cast:
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
Если я не произведу, компилятор будет жаловаться на несоответствие типа; он не может преобразовать из Set<SomeEnum> в EnumSet<SomeEnum>. Кажется излишним придать это, поскольку ключи EnumMap всегда будут перечислением. Кто-нибудь знает, почему метод keySet() был построен таким образом? Я иногда думал, что это может быть связано с тем, что EnumSet является абстрактным классом, но, безусловно, EnumMap может просто вернуть все, что предлагает factory метод EnumSet.
Привет, все!
РЕДАКТИРОВАТЬ: Мне очень жаль, приведенный выше код вызывает CastClassException. Вы можете получить EnumSet, используя
EnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
Я действительно должен был проверить перед публикацией.