个人读书笔记,部分没读懂的知识点可能会简单概括或缺失,以后反复阅读后再完善。
第6章 枚举和注解
第30条:用enum代替int常量
int枚举模式:
public static final int APPLE_FUJI=0;
public static final int APPLE_PIPPIN=1;
public static final int APPLE_GRANNY_SMITH=2;
int枚举模式如果与枚举常量关联的int发生了变化,客户端就必须重新编译。
枚举类型:
public enum Apple{FUJI,PIPPIN,GRANNY_SMITH}
第31条: 用实例域代替序数
ordinal方法返回每个枚举常量在类型中的数字位置。
public enum Ensemble{
SOLO,DUET,TRIO,QUARTET,QUINTET,
SEXTET,SEPTET,OCTET,NONET,DECTET;
public int numberOfMusicians() { return ordinal()+1; }
}
但最好用这种写法:
public enum Ensemble{
SOLO(1),DUET(2),TRIO(3),QUARTET(4),QUINTET(5),
SEXTET(6),SEPTET(7),OCTET(8),NONET(9),DECTET(10),
TRIPLE_QUARTET(12);
private final int numberOfMusicians;
Ensemble(int size) {
this.numberOfMusicians = size;
}
public int numberOfMusicians() { return numberOfMusicians; }
}
第31条: 用EnumSet代替位域
int枚举模式:
public class Text {
public static final int STYLE_BOLD=1<<0;
public static final int STYLE_ITALIC=1<<1;
public static final int STYLE_UNDERLINE=1<<2;
public static final int STYLE_STRIKETHROUGH=1<<3;
public void applyStyles(int styles) {
}
}
这种表示法让你用OR运算符将几个常量合并到一个集合中,称作位域:
text.applyStyles(STYLE_BOLD|STYLE_ITALIC);
用枚举代替位域后的代码:
public class Text {
public enum Style{BOLD,ITALIC,UNDERLINE,STRIKETHROUGH}
public void applyStyles(Set