Java 7中是否有ImmutableEnumSet的计划?
我希望拥有EnumSet的所有效率,并将其传递出去,而不必担心有人会修改它。集合有什么问题。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
仍然是可变的,但是只要您放弃原始引用,它在包装器中也是不可变的
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?