概述:
在實際編碼中總是會遇到 空指針異常 ,本文總結(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"
}