編寫高效的Android代碼(譯)

Effective Java我們都知道,這本書是編寫高效可維護的java代碼最重要的書籍。雖然Android使用java寫的,但是書里的建議也不一定就完全適用。甚至有些人認為大部分建議都不適用于Android開發。在我看來,由于Android中使用的虛擬機(Dalvik/ART)與傳統的JVM有差異,所以某些java的優化如enums、serialization等在Android中不很適用。當然,書中的很多建議經過一些小修改,可幫助我們開發出更健壯、整潔、可維護的代碼。

這篇文章里我介紹下我認為書中適合于Android開發的比較重要的幾點。對于讀過這本書的人可以溫習一下,沒讀過的可以學習一下。

強制不能生成實例

如果不希望使用new 關鍵詞創建對象,則可以把構造函數的訪問權限設置為private,尤其是那些只包含靜態方法的工具類。

靜態工廠

使用靜態工廠方法代替new 關鍵詞創建對象,工廠方法通過不同的命名可以根據需要返回不同的子類對象,而且如果需要可以不用每次都創建新對象。

[Update] 一個讀者提出一個建議:使用靜態工廠后不方便測試,如果是這樣,可以在測試期通過使用非靜態工廠來模擬。

Builders

當構造方法中有超過三個參數時,可以考慮使用builder去構建對象,可能有些繁瑣,但是這樣易于擴展且可讀性更強。如果是創建一個 value class,可以使用AutoValue

避免可變

不可變指一個對象在其生命周期中保持相同的值,在創建時就設置來所有需要的值。這樣做的好處很多,比如線程安全、可共享等。

但是不能所有對象都是不可變的,所以要盡力做到(比如定義private final成員變量,final類)。

靜態內部類

如果創建內部類時不依賴外部類,一定要定義為靜態類,否則內部類的實例會持有外部類實例的引用。

使用泛型

我們應該感謝Java的類型安全(對比JS),盡量保證編譯期的類型安全:

不要忘記方法的參數和返回值可以使用泛型:

還可以使用受限的通配符來限制類型的上下界:

返回空值

如果有一個方法的返回值類型是List/collection,不要返回null,可以返回一個空collection:

不要使用"+"操作String

當只有少數String時,可以考慮使用 "+",當數量較多時,考慮使用StringBuilder:

異常恢復

我不支持為了指示錯誤而拋出異常,如果你想這樣做,最好保證程序可以從異常恢復:

總結

文章中沒有包含書里所有的建議,僅僅是其中一些比較實用的tips的備忘錄。

原文地址Effective Java for Android (cheatsheet)

推薦閱讀:

重要-作為Android開發者必須了解的Gradle知識

編寫高效的Android代碼(譯)

Android中使用gradient的一條建議

尋找卓越的(Android)軟件工程師

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容