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