01 Consider static factory methods instead of constructors
使用靜態(tài)工廠(chǎng)方法代替參數(shù)很多并且參數(shù)類(lèi)型一樣的構(gòu)造方法, 這樣用戶(hù)會(huì)比較清晰的構(gòu)造對(duì)象.
02 Consider a builder when faced with many constructor parameters
使用構(gòu)造器模式代替參數(shù)很多的構(gòu)造器方法, 這樣用戶(hù)可以根據(jù)自己的用途構(gòu)造對(duì)象, 不用每次都加上自己用不到的參數(shù)就構(gòu)造對(duì)象.
03 Enforce the singleton property with a private constructor or an enum type
作者建議使用枚舉類(lèi)創(chuàng)建單例對(duì)象, 使用簡(jiǎn)單, 并且不需要考慮序列化等問(wèn)題. spring注入的bean默認(rèn)都是單例的, 它是如何實(shí)現(xiàn)的? 后面看下.
04 Enforce noninstantiability with a private constructor
工具類(lèi)一般只包含靜態(tài)字段和靜態(tài)方法, 對(duì)于這樣的工具類(lèi)強(qiáng)制使用一個(gè)私有構(gòu)造方法, 防止用戶(hù)初始化該類(lèi). 更強(qiáng)一點(diǎn)是在私有構(gòu)造方法中拋出異常, 這樣就可以防止用戶(hù)通過(guò)反射等手段初始化對(duì)象.
05 Avoid creating unnecessary objects
- 避免創(chuàng)建不必要的對(duì)象, 比如通過(guò)new String("xxx") 創(chuàng)建字符串類(lèi)型, 實(shí)際創(chuàng)建了兩個(gè)對(duì)象, 不過(guò)一般工作中大家也沒(méi)有這么用的, 都是直接賦值 String s = "xxxx". 這種比較明顯的問(wèn)題一般都會(huì)注意.
- 還有一種不明顯的. 在對(duì)基礎(chǔ)類(lèi)型自動(dòng)裝箱時(shí)會(huì)創(chuàng)建裝箱類(lèi)型對(duì)象, 這個(gè)是平常工作中不太在意的點(diǎn)(一般只關(guān)注拆箱的NPE問(wèn)題), 我們應(yīng)該在入口處做好類(lèi)型裝換, 避免在業(yè)務(wù)處理中頻繁的拆箱裝箱.