Java的EnumSet是否可变?

时间:2018-03-13 18:11:35

标签: java

有没有办法修改EnumSet对象?似乎(例如)EnumSet.add继承自AbstractSet并且会引发UnsupportedOperationException

然而,好像EnumSet可以修改;否则为什么要使用clone()方法,为什么番石榴会Sets.immutableEnumSet()?是否有EnumSet的方法逃脱了我的想法?

3 个答案:

答案 0 :(得分:6)

EnumSet可以修改。如果要创建不可变的EnumSet,请转到immutableSet

  • 返回包含给定枚举元素的不可变集合实例。在内部,返回的集将由EnumSet支持。
  • 返回集的迭代顺序遵循枚举的迭代顺序,而不是元素在给定集合中出现的顺序。
  

参数:   元素 - 集合应包含的元素,所有相同的枚举类型   返回:   包含这些元素的不可变集合,减去重复项

答案 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是一个抽象类,具有实现RegularEnumSetJumboEnumSet。这两个命令add都是可变的。 EnumSet.of(...)根据枚举次数选择RegularEnumSetJumboEnumSet