マップのキーセットを列挙型で検証する必要があるマップがあります。enumでマップのキーセットを検証するエレガントな方法?
public enum Tag {
rename, duplicate, process, limit, encode, decode;
};
今マップのkeyset
列挙型以上の値を持つ必要があります:私は、以下のように列挙型クラスを持っています。私のキーセットにenumにない値が含まれている場合、IllegalArgumentException
を値に設定してenumから抜け出したいと思います。
以下は私のコードです:
public Processor(Map<String, String> tasks) {
Set<String> keyset = tasks.keySet();
for (String tag : keyset)
checkArgument(!EnumUtils.isValidEnum(Tag.class, tag), "unknown tag found '%s'.", tag);
}
あなたは私がkeyset
を反復してPreconditions.checkArgument
チェックをやって見ることができるように。それがなければIllegalArgumentException
を投げます。私は確信してメッセージを改善することができます確信しています。
私の質問です:同じことを私がやっていることと比較してより良い方法がありますか?チェックのためにforループ内のkeyset
を反復処理する必要がありますか?またはこのバリデーションを行うためのライナーや他の方法がありますか?
私はJava7を使用しています。
マップに 'Tag'列挙からのキーを持たせたいのであれば、本当に' Map 'であってはなりません。 –
user2357112
'Map'を使うだけですか?たぶん 'EnumMap'ですか? –
chrylis