第34條:用 enum 代替 int 常量
用枚舉的情況一般都是某個(gè)類(lèi)別的常量。比如星期、月份、顏色等等。
第35條:用實(shí)例域代替序數(shù)索引
枚舉雖然自帶 ordinal 方法,并且從0開(kāi)始,但是應(yīng)避免使用這個(gè)方法。當(dāng)需要類(lèi)似參數(shù),定義一個(gè)參數(shù)即可。
第36條:用 EnumSet 代替位域
用 OR 位運(yùn)算將幾個(gè)常量合并到一個(gè)集合中,稱(chēng)作位域(bit field)。比如:常量 | 常量 | 常量...,也就是并集
- 規(guī)律性的常量本身可以用枚舉來(lái)列舉
- EnumSet 內(nèi)部具體實(shí)現(xiàn)上,每個(gè)元素都表示為位矢量。Set 集合的一些操作 add、remove 等,都是利用位運(yùn)算來(lái)實(shí)現(xiàn)的
- 所以建議用 EnumSet 代替位域,以避免手寫(xiě)產(chǎn)生的BUG
第37條:用 EnumMap 代替序數(shù)索引
避免把枚舉 ordinal 值當(dāng)數(shù)組角標(biāo)。當(dāng)注意到第35條,也就不會(huì)發(fā)生本條的情況了。
第38條:用接口模擬可擴(kuò)展的枚舉
當(dāng)枚舉可能被擴(kuò)展時(shí),請(qǐng)定義一個(gè)接口,就可以有多個(gè)實(shí)現(xiàn)類(lèi)。
第39條:注解優(yōu)先于命名模式
避免使用前綴匹配方式,優(yōu)先使用注解。
第40條:堅(jiān)持使用 Override 注解
IDE一般都會(huì)提示,有時(shí)候會(huì)避免一些方法覆蓋錯(cuò)誤。
第41條:用標(biāo)記接口定義類(lèi)型
標(biāo)記接口是不包含方法聲明的接口,實(shí)現(xiàn)這類(lèi)接口,說(shuō)明類(lèi)擁有接口標(biāo)記的功能。比如序列化接口:Serializable