Java 7中是否有ImmutableEnumSet的计划?

Java 7中是否有ImmutableEnumSet的计划?,java,collections,enums,java-7,Java,Collections,Enums,Java 7,我希望拥有EnumSet的所有效率,并将其传递出去,而不必担心有人会修改它。集合有什么问题。不可修改集()包装EnumSet 诚然,原始的EnumSet仍然是可变的,但是只要您放弃原始引用,它在包装器中也是不可变的 edit:OK,因为EnumSet在Set接口上不提供任何实例方法,所以不使用此解决方案的唯一原因是EnumSet类型对于文档编制非常有用,而将其包装到Set中时会丢失它。除此之外,EnumSet行为将被保留 您可以使用Google collections(番石榴)获得一个不可变的枚

我希望拥有EnumSet的所有效率,并将其传递出去,而不必担心有人会修改它。

集合有什么问题。
不可修改集()
包装
EnumSet

诚然,原始的
EnumSet
仍然是可变的,但是只要您放弃原始引用,它在包装器中也是不可变的


edit:OK,因为
EnumSet
Set
接口上不提供任何实例方法,所以不使用此解决方案的唯一原因是
EnumSet
类型对于文档编制非常有用,而将其包装到
Set
中时会丢失它。除此之外,
EnumSet
行为将被保留

您可以使用Google collections(番石榴)获得一个不可变的枚举集


资源:


它没有
枚举集的所有方法
@Colin那是什么方法?在包装枚举集之前,您仍然可以使用静态方法来创建它,并且我在枚举集中没有看到其他集合也没有的任何新实例方法。@skaffman。我想我想要它主要是为了文档的目的。EnumSet的特点是它指定了特定的迭代顺序,如果使用
Set
代替
EnumSet
,可能会产生与预期不同的结果:例如,有人在方法签名中看到
Set
,然后传入
HashSet
。没有这个要求,你的建议就可以了。顺便说一句,
EnumSet
没有额外的方法(只有构造函数),不过在某些情况下,最好有
first
last
reverseIterator
。@seanizer,嗯,我没有注意到新方法是静态的。@seanizer:这不是真的,集合框架中有一些不破坏接口的类特定方法的先例,例如,
ArrayList.ensureCapacity()
Guava正在成为一个很棒的库。这石头+如果
设置,1将接受它。immutableEnumSet
将返回一个公共
immutableEnumSet
类,而不仅仅是
ImmutableSet
。尽管我会尝试请求这样做。我想知道,您认为这种公共ImmutableEnumSet类型有什么好处?@KevinBourrillion:有显式的不同迭代顺序(与ImmutableSet相比)?@KevinBourrillion:一些公共方法,如complete或getUniverse?