我看到EnumSet.of()返回了EnumSet类型的对象的实例。
但是我不知道哪个类实际实现了这个抽象类?如果没有子类化,如何获取抽象类型EnumSet的实例?
最佳答案
这是java中的2个扩展EnumSet
的类
1. RegularEnumSet
2. JumboEnumSet
您可以使用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);
}