(32):用EnumSet代替位域

    xiaoxiao2021-04-16  54

    位域:就是用int枚举模式,将2的不同倍数赋予每个常量,这种表示法让你用OR位运算将几个常量合并到一个集合中(int值),称作位域(bit field)。

    位域的写法就不介绍了,总之这种写法缺陷比较大。

    我们应该用EnumSet代替它。

    public class Text { public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH } // Any Set could be passed in, but EnumSet is clearly best public void applyStyles(Set<Style> styles) { // Body goes here } // Sample use public static void main(String[] args) { Text text = new Text(); text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC)); } } 总而言之正是因为枚举类型要用在集合(Set)中,所以没有理由用位域来表示它.EnumSet类集位域的简洁和性能的优势及枚举类型的所有优点与一身.实际上EnumSet也有个缺点,即它无法创建不可变的EnumSet(Java1.6为止没有解决).同时,可以用Collections.unmodifiable将EnumSet封装起来,但是间接性和性能会受到影响.

    转载请注明原文地址: https://ju.6miu.com/read-673050.html

    最新回复(0)