我正在写一个有很多枚举的程序,我经常需要返回EnumMap
的键集。但是EnumMap.keySet()
返回一个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());
在发布前我真的应该先检查一下。
Set<SomeEnum>
。使用EnumSet<SomeEnum>
有什么好处? - Guillaume PoletEnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
- jalopezp