我看到EnumSet.of()返回了EnumSet类型的对象的实例。
但是我不知道哪个类实际实现了这个抽象类?如果没有子类化,如何获取抽象类型EnumSet的实例?

最佳答案

这是java中的2个扩展EnumSet的类

1. RegularEnumSet
2. JumboEnumSet

您可以使用EnumSet的静态方法(例如EnumSet#noneOfEnumSet#allOf等)创建实例。实际上,该方法会根据条件返回RegularEnumSetJumboEnumSet的实例。 EnumSet#of内部调用EnumSet#noneOf。请参考Java中的以下代码,了解EnumSet#noneOf的工作原理
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
    Enum<?>[] universe = getUniverse(elementType);
    if (universe == null)
        throw new ClassCastException(elementType + " not an enum");

    if (universe.length <= 64)
        return new RegularEnumSet<>(elementType, universe);
    else
        return new JumboEnumSet<>(elementType, universe);
}

10-08 03:15