編寫高效的Android代碼(譯)

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

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

強制不能生成實例

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

靜態(tài)工廠

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

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

Builders

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

避免可變

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

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

靜態(tài)內部類

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

使用泛型

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

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

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

返回空值

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

不要使用"+"操作String

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

異?;謴?/h2>

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

總結

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

原文地址Effective Java for Android (cheatsheet)

推薦閱讀:

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

編寫高效的Android代碼(譯)

Android中使用gradient的一條建議

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容