代码之家  ›  专栏  ›  技术社区  ›  sk.

正在检查是否映射了所有枚举值?

  •  3
  • sk.  · 技术社区  · 16 年前

    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构造函数中给出),并创建一次性KeySet和EnumSet对象。EnumMap应该有足够的信息,以便作为内部操作高效地执行此操作。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Michael Myers KitsuneYMG    16 年前

    我在中找不到内置的方法来实现这一点 EnumMap (我检查了源代码以确定)。然而,这里有一种稍微快一点的方法:

    public static <T extends Enum<T>> boolean areAllValuesMapped(EnumMap<T,?> map, Class<T> enumClass) {
        return map.size() == enumClass.getEnumConstants().length;
    }
    

    我应当指出 EnumMap.keySet() 不返回a EnumSet 如果是这样 equals() 您使用的电话将是一个简单的比较问题 longs 事实上,它必须使用迭代器并按顺序检查每个枚举常量。