簡體   English   中英

用枚舉驗證地圖鍵集的優雅方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM