EffectiveJava之15、17、24、29、32

15-要麼專爲繼承設計,否則不允許繼承

1、 爲了編出更有效的子類,一個類必須通過某種形式提供適當的鉤子,以便能夠進入到它的內部工作流程中。  

2、 爲了允許繼承,構造函數一定不能調用能被改寫的方法。


17-接口只是被用於定義類型

1、 爲了編出更有效的子類,一個類必須通過某種形式提供適當的鉤子,以便能夠進入到它的內部工作流程中。  

2、 爲了允許繼承,構造函數一定不能調用能被改寫的方法。


24-保護性拷貝

1、  對於構造函數的每個可變參數進行保護性拷貝(defensive copy),並且使用拷貝後的對象而非原始對象

2、  保護性拷貝動作是在檢查參數的有效性之前,而且有效性的檢查是對於拷貝之後的對象而非原始對象---------可避免“脆弱性窗口”中另一個線程改變原始的參數對象

3、  對於 參數類型可以被不可信的子類化,請不要使用 clone 法方進行保護性拷貝


29-將局部變量的作用域最小化

1、  使一個局部變量的作用域最小化,最有力的方法是在第一次使用它的地方聲明

2、  幾乎每一個局部變量都應該有一個初始化表達式

for(int i =0 , n = expensiveComputation() ; i<n ; i++){

           doSomething() ;

}

3、  “最小化局部變量的作用域”-----方法小而集中


32-其他類型合適時,儘量避免使用字符串.

1、  字符串不適合代替其他的值類型

2、  字符串不適合代替其他枚舉類型  (類型安全枚舉類型和 int 比較適合表示枚舉類型的常量 )

3、  字符串不適合代替聚集類型

StringcompoundKey = className + “#” +I . next( ) ;

如果想訪問單獨的域, 你必須解析該字符串 , 無法提供equals 、toString 等方法 , 我們可以用以個類來描述這個數據集,通常是一個私有的靜態成員類




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章