我正在编写一个包含大量枚举的程序,并且我不得不返回很多 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());
我真的应该在发帖前检查一下。