我看到EnumSet.of()返回EnumSet类型的对象的实例.但我无法弄清楚哪个类实际实现了这个抽象类?当你没有子类化它时,如何获得抽象类型EnumSet的实例?
以下是java中的2个扩展类 EnumSet
1. RegularEnumSet
2. JumboEnumSet
Run Code Online (Sandbox Code Playgroud)
您可以使用EnumSet的静态方法创建实例,例如EnumSet#noneOf,EnumSet#allOf实际上返回实例RegularEnumSet或JumboEnumSet取决于条件.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)
您不直接创建实例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)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |