概述:
在實際編碼中總是會遇到 空指針異常 ,本文總結了一些處理空指針的個人經驗。
原則:
盡早的檢查,盡早的失敗。
比如: 通過intent傳參到新的目標 activity,而且一定需要這個參數,那么在新的目標activity中 onCreate方法中 判斷中這個參數,如果null,直接拋出空指針異常讓程序崩潰。取代在使用該參數時進行檢查,這樣能更早的發現問題。或者在 一個普通的方法中,一個 參數必須不能為null ,那么我們在這個方法的第一行就做出判斷,如果參數為null,拋出空指針異常。
一些方法:
1. 不要在Set中使用null
2. 不要把null作為map的鍵值。
3. 盡可能的盡早檢查,如果為 null 不執行或者 結束本方法
4. 遇到必須的參數,比如通過intent傳參到新的目標 activity,而且一定需要這個參數,那么在新的目標activity中判斷是否有參數
if(getIntent() == null) throw new NullPointerException("缺少必須的參數"); if(!getIntent().hasExtra("argument_name")) throw new NullPointerException("缺少必須的參數");
5. 判斷字符串是否空
if(TextUtils.isEmpty(str)){
//doSometing
}
6. 對字符串比較時,如果和常量進行比較,把常量放在前面,比如:
“good".equals(var) 優於 var.equals("good")
7. 將 某個對象 toString時,比如:
String.valueOf(obj) 優於 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); }
擴展:
Guava是什么:
Guava工程包含了若干被Google的 Java項目廣泛依賴 的核心庫,例如:集合 [collections] 、緩存 [caching] 、原生類型支持 [primitives support] 、並發庫 [concurrency libraries] 、通用注解 [common annotations] 、字符串處理 [string processing] 、I/O 等等。 所有這些工具每天都在被Google的工程師應用在產品服務中。
Guava工具類對Null值都采用快速失敗操作
添加項目引用
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile "com.google.guava:guava:18.0" }
參考:
http://ifeve.com/google-guava/