Android開發(fā) - 處理 null 和 預(yù)防空指針異常(NullPointerException) 的一些經(jīng)驗

概述:

在實際編碼中總是會遇到 空指針異常 ,本文總結(jié)了一些處理空指針的個人經(jīng)驗。

原則:

盡早的檢查,盡早的失敗。

比如: 通過intent傳參到新的目標(biāo) activity,而且一定需要這個參數(shù),那么在新的目標(biāo)activity中 onCreate方法中 判斷中這個參數(shù),如果null,直接拋出空指針異常讓程序崩潰。取代在使用該參數(shù)時進(jìn)行檢查,這樣能更早的發(fā)現(xiàn)問題?;蛘咴?一個普通的方法中,一個 參數(shù)必須不能為null ,那么我們在這個方法的第一行就做出判斷,如果參數(shù)為null,拋出空指針異常。

一些方法:

1.不要在Set中使用null
2.不要把null作為map的鍵值。
3.盡可能的盡早檢查,如果為 null 不執(zhí)行或者 結(jié)束本方法
4.遇到必須的參數(shù),比如通過intent傳參到新的目標(biāo) activity,而且一定需要這個參數(shù),那么在新的目標(biāo)activity中判斷是否有參數(shù)

        if(getIntent() == null) throw new NullPointerException("缺少必須的參數(shù)");
        if(!getIntent().hasExtra("argument_name")) throw new NullPointerException("缺少必須的參數(shù)");

5.判斷字符串是否空

    if(TextUtils.isEmpty(str)){
        //doSometing
    }

6.對字符串比較時,如果和常量進(jìn)行比較,把常量放在前面,比如:

    “good".equals(var)  優(yōu)于  var.equals("good")

7.將某個對象 toString時,比如:

    String.valueOf(obj)   優(yōu)于  obj.toString()

8.使用注解 @NonNull 和 @Nullable 配合AndroidStudio 幫你檢查你是否沒有檢查可能為null的對象,或者你是否做了多余的檢查。

9.我們引用Guava來幫忙檢查 null 的情況,我們使用 checkNotNull 方法來替代寫 if( obj == null) throw new NullPointExcetion(); ,示例:

public void print2(@NonNull MyObject act) {
    checkNotNull(act);
    Log.i(TAG, "print2 " + act.name);
}

擴(kuò)展:

Guava是什么:

Guava工程包含了若干被Google的 Java項目廣泛依賴 的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、并發(fā)庫 [concurrency libraries] 、通用注解 [common annotations] 、字符串處理 [string processing] 、I/O 等等。 所有這些工具每天都在被Google的工程師應(yīng)用在產(chǎn)品服務(wù)中。
Guava工具類對Null值都采用快速失敗操作

添加項目引用

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.google.guava:guava:18.0"
}

參考:

http://ifeve.com/google-guava/

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容