我正在编写一个包含大量枚举的程序,而且我必须经常返回EnumMap的键集.但是EnumMap.keySet()返回一个Set(),所以为了得到EnumSet我想要的,我必须使用一个演员:
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
Run Code Online (Sandbox Code Playgroud)
如果我不投,编译器会抱怨类型不匹配; 它无法转换Set<SomeEnum>为EnumSet<SomeEnum>.似乎没有必要强制转换它,因为EnumMap的键始终是枚举.有谁知道为什么这个keySet()方法是这样构造的?我有时认为它可能与EnumSet是一个抽象类有关,但肯定EnumMap可以返回所EnumSet提供的工厂方法.
干杯,全部!
编辑:我很抱歉,上面的代码抛出了一个CastClassException.您可以使用获取EnumSet
EnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
Run Code Online (Sandbox Code Playgroud)
我真的应该在发布前检查.
我认为这keySet是因为它不是一个EnumSet.;)
它不是原因是它是keySet底层地图的视图.
myMap.keySet().removeAll(keysToRemove); // removes multiple keys.
Run Code Online (Sandbox Code Playgroud)