android( java) 處理 null 和 預防空指針異常(NullPointerException) 的一些經驗。


概述:

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

 

原則:

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

  比如: 通過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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM