Я пишу программу с большим количеством перечислений, и мне нужно вернуть набор ключей 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());
Я действительно должен был проверить перед публикацией.