2
java標準庫中是否有一種方便的方法來檢查EnumMap中所有可能的鍵是否映射到一個值?檢查是否所有的枚舉值都被映射了?
我可以寫我自己喜歡的方法:
public static <T extends Enum<T>> boolean areAllValuesMapped(EnumMap<T, ?> map, Class<T> enumClass)
{
return map.keySet().equals(EnumSet.allOf(enumClass));
}
但後來我不停地重複Class參數(在EnumMap的構造已經給出)以及創建一次性密鑰集和EnumSet對象。 EnumMap應該有足夠的信息來作爲內部操作來有效地執行此操作。
請注意,Class#getEnumConstants()克隆了基礎數組;如果緩存大小是可能的,這可能是值得避免的成本。另外,請注意,如果類實際上並沒有擴展`Enum`,Class#getEnumConstants()將返回null。在這裏,你已經正確地限定了類型參數`T`來防範這種情況,所以我猜如果調用者在一個非法類中做了一些不合理的轉換,遇到拋出的`NullPointerException`將是一個可以接受的懲罰。拋出`IllegalArgumentException`也是合適的。通常我寫`assert null!=常量;`。 – seh 2011-06-24 23:51:59