Effective Java

来源:互联网 发布:linux snmp 监控cpu 编辑:程序博客网 时间:2024/06/05 03:44

1. 用enum代替int常量。

2. 用实例域代替序数。

3. 用EnumSet代替位域。

4. 用EnumMap代替序数索引。


1. 用enum代替int常量。

与int常量相比,枚举简单易读,也更加的安全,功能更加强大。在我们日常的编码过程中要有用枚举来替代常量的意识。


2. 用实例域代替序数。

枚举是有顺序的,我们可以通过ordinal()来得到序号,但是我们不要根据这个序号导出与它关联的值,而是要将它保存在一个实例域中。看下面代码,我们用index保存序号。

public enum Color {          RED(1), GREEN(2), BLANK(3), YELLO(4);              private int index ;         private Color(int index ){        this.index = index ;    }         public int getIndex() {        return index;    }    public void setIndex(int index) {        this.index = index;    }   }


3. 用EnumSet代替位域。

看这小节之前,可以先看一下上一篇关于EnumSet的原理。EnumSet用来存放枚举的集合,用位向量来操作和保存枚举集合。当一组常量需要用到位运算,我们可以用枚举和EnumSet来进行处理。这样可以编写更加安全和高效的代码。


4. 用EnumMap代替序数索引。

看着小节之前,可以先看一下上一篇关于EnumMap的原理。总结一下这节的内容,虽然枚举有顺序数,我们可以通过ordinal方法得到,但不要用这个数来作为索引(数组的或者其他的),我们可以用EnumMap做作为替换,直接把枚举作为EnumMap的key,想要的内容作为EnumMap的value。可以参考一下文中的第一个例子。更加安全,效率也很高。




原创粉丝点击