私は多くの列挙を含むプログラムを書いており、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());
投稿する前に本当に確認すべきでした。