有没有办法修改EnumSet
对象?似乎(例如)EnumSet.add
继承自AbstractSet
并且会引发UnsupportedOperationException
。
然而,好像EnumSet
可以修改;否则为什么要使用clone()
方法,为什么番石榴会Sets.immutableEnumSet()
?是否有EnumSet
的方法逃脱了我的想法?
答案 0 :(得分:6)
是EnumSet
可以修改。如果要创建不可变的EnumSet,请转到immutableSet
参数: 元素 - 集合应包含的元素,所有相同的枚举类型 返回: 包含这些元素的不可变集合,减去重复项
答案 1 :(得分:3)
EnumSet
只是一个抽象类。它的实现覆盖了add
方法,这使得它变得可变,因此以下是可能的
EnumSet<MyEnum> enumSet = EnumSet.of(MyEnum.A);
enumSet.add(MyEnum.B);
private static enum MyEnum {
A,B,C;
}
答案 2 :(得分:2)
EnumSet
是一个抽象类,具有实现RegularEnumSet
和JumboEnumSet
。这两个命令add
都是可变的。 EnumSet.of(...)
根据枚举次数选择RegularEnumSet
或JumboEnumSet
。