了解枚举器的enumset

时间:2015-07-06 06:52:25

标签: java methods enums enumset method-declaration

据我了解,使用EnumSet会更容易和更清楚,Set是专为与枚举器一起使用而设计的。我的问题是,每次我们需要维护一些枚举器时,是否应该考虑使用EnumSet。例如,我让他遵循枚举:

public enum ReportColumns{
    ID,
    NAME,
    CURRENCY
    //It may contain much more enumerators than I mentioned here

    public int getMaintenanceValue(){ 
        //impl
    }
}

我需要在方法中使用枚举的一些集合:

public void persist(Collection<ReportColumns> cols){
    List<Integer> ints = new LinkedList<>();
    for(ReportColumn c: cols){
        ints.add(c.getMaintenanceValue());
    }
    //do some persistance-related operations
}

所以,如果我不关心是否订购了这个集合,我应该每次使用EnumSet<E>来提高性能吗?

1 个答案:

答案 0 :(得分:3)

根据经验,只要您创建一组枚举并且不关心他们的订单,就应该创建一个EnumSet。正如你所提到的,它会使你的性能略有提高(事实上,我知道大多数静态代码分析工具实际上都警告过不使用它)。

对于方法声明,但我不会。作为另一个经验法则,方法应该使用&#34;最高&#34;类型可能仍然有意义。这种方法的公共合同应该是&#34;给我一堆枚举,我会坚持他们#34;。该方法不应该关心传递什么集合,因此强制参数类型为EnumSet是没有意义的。如果您传递的具体类型确实是EnumSet,那么您将获得所有性能优势。