Я пишу программу с большим количеством перечислений, и мне нужно вернуть набор ключей EnumMap. Но EnumMap.keySet()
Set()
возвращает, поэтому для того, чтобы получить EnumSet
я хочу, я должен использовать бросок:Почему EnumMap <T> .keySet() возвращает a <T>(), а не EnumSet <T>()?
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
Если я не отбрасывают, компилятор будет жаловаться на несоответствие типов; он не может конвертировать из Set<SomeEnum>
в EnumSet<SomeEnum>
. Кажется излишним придать это, поскольку ключи EnumMap всегда будут перечислением. Кто-нибудь знает, почему метод keySet()
был построен таким образом? Я иногда думал, что это может быть связано с тем, что EnumSet является абстрактным классом, но, безусловно, EnumMap
может просто вернуть все, что предлагает фабричный метод EnumSet
.
Приветствия, все!
EDIT: Мне очень жаль, приведенный выше код выдает CastClassException
. Вы можете получить EnumSet с помощью
Я действительно должен был проверить перед публикацией.
Вы получаете 'Set'. Каково было бы получить «EnumSet »? –
@PaulBellora Вы правы, это неправильно. Я исправлю это. Должно быть 'EnumSet myEnum = EnumSet.copyOf (myMap.keySet());' –
jalopezp
Также здесь есть прекрасный вид источника, с встроенным javadoc: http://grepcode.com/file/repository.grepcode.com /java/root/jdk/openjdk/6-b14/java/util/EnumMap.java#EnumMap.keySet%28%29 –