私はたくさんの列挙型のプログラムを書いています。私はEnumMapのキーセットを多く返す必要があります。私が欲しいEnumSet
を得るために、私はキャストを使用する必要があるのでしかし、Set()
をEnumMap.keySet()
返す:私はキャストしていない場合、コンパイラは型の不一致を訴えるだろうEnumMap <T> .keySet()はEnumerSet <T>()ではなく、<T>()のセットを返します。
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
を。 Set<SomeEnum>
からEnumSet<SomeEnum>
に変換できません。 EnumMapのキーは常に列挙型になるため、これをキャストする必要はありません。誰でもこの方法でkeySet()
メソッドが構築された理由を知っていますか? EnumSetを抽象クラスとして扱うことがあると思ったことがありますが、確かにEnumMap
は、ファクトリメソッドEnumSet
を返すことができます。
乾杯!
編集:大変申し訳ございませんが、上記コードはCastClassException
です。
EnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
私は実際に投稿する前にチェックしておくべきでした。
あなたは 'Set'を取得します。 'EnumSet 'を取得するとどうなるでしょうか? –
@PaulBelloraそうです、上記は間違っています。私はそれを修正します。 である必要があります。 'EnumSet myEnum = EnumSet.copyOf(myMap.keySet());' –
jalopezp
また、インラインスタイルのjavadocを使用した、ソースの素晴らしいビューがあります:http://grepcode.com/file/repository.grepcode.com /java/root/jdk/openjdk/6-b14/java/util/EnumMap.java#EnumMap.keySet%28%29 –