[英]Elegant way to validate keyset of a map with an enum?
我有一個地圖,我需要用我的枚舉來驗證地圖的鍵集。 我有一個枚舉類,如下所示:
public enum Tag {
rename, duplicate, process, limit, encode, decode;
};
現在,地圖的keyset
應該具有上述枚舉中的值。 如果我的鍵集包含枚舉中不存在的值,那么我想拋出IllegalArgumentException
且枚舉中缺少該值。
下面是我的代碼:
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
。
public Processor(Map<Tag, String> tasks) {
// processor logic
}
這樣可以確保傳入的映射中的鍵只能是Tag
。 您也不需要此方案中的異常,因為如果傳遞了無效的密鑰,則代碼將無法編譯。 另外,由於它是一個枚舉,因此您不會獲得該枚舉中沒有的任何鍵。
如果您正在處理字符串列表,並且無法直接獲取枚舉,則可以使用Tag.valueOf("<string value here>")
進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.