Java中的哪个类实现了抽象类EnumSet?

Foo*_*Foo 3 java enumset

我看到EnumSet.of()返回EnumSet类型的对象的实例.但我无法弄清楚哪个类实际实现了这个抽象类?当你没有子类化它时,如何获得抽象类型EnumSet的实例?

Ami*_*era 6

以下是java中的2个扩展类 EnumSet

1. RegularEnumSet
2. JumboEnumSet
Run Code Online (Sandbox Code Playgroud)

您可以使用EnumSet的静态方法创建实例,例如EnumSet#noneOf,EnumSet#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);
}
Run Code Online (Sandbox Code Playgroud)


Dir*_*irk 5

您不直接创建实例EnumSet.这是通过静态工厂方法完成的,例如:

enum Demo { YES, NO, FILENOTFOUND }

EnumSet<Demo> all = EnumSet.allOf(Demo.class);
EnumSet<Demo> notNo = EnumSet.of(Demo.YES, Demo.FILENOTFOUND);
EnumSet<Demo> none = EnumSet.noneOf(Demo.class);
Run Code Online (Sandbox Code Playgroud)

结果集是可变的,即你可以这样做:

EnumSet<Demo> set = EnumSet.noneOf(Demo.class);  // start with an empty set
...
set.add(Demo.YES);
set.remove(Demo.NO);
...
set.clear();
...
Run Code Online (Sandbox Code Playgroud)