我正在编写一个包含大量枚举的程序,并且我不得不返回很多 EnumMap 的键集。但是EnumMap.keySet()
返回 a Set()
,所以为了得到EnumSet
我想要的,我必须使用演员表:
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
如果我不强制转换,编译器会抱怨类型不匹配;它不能从 转换Set<SomeEnum>
为EnumSet<SomeEnum>
。似乎没有必要强制转换,因为 EnumMap 的键将始终是枚举。有谁知道为什么这个keySet()
方法是这样构造的?我有时认为它可能与 EnumSet 作为一个抽象类有关,但肯定EnumMap
可以返回工厂方法EnumSet
提供的任何内容。
干杯,所有!
编辑:我很抱歉,上面的代码抛出一个CastClassException
. 您可以使用 EnumSet
EnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
我真的应该在发帖前检查一下。