android android關係 - Java:如何檢查對像是否為空?




android用法 intent教學 (8)

我正在創建一個從Web檢索圖像的應用程序。 如果無法檢索圖像,則應使用另一個本地圖像。

在嘗試執行以下行時:

Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (drawable.equals(null)) {
  drawable = getRandomDrawable();
}

如果drawable為null,則行if(drawable.equals(null))拋出異常。

有沒有人知道如何檢查drawable的值,以便在它為null並且檢索本地圖像時拋出異常(執行drawable = getRandomDrawable())?


Answers

DIY

private boolean isNull(Object obj) {
    return obj == null;
}
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (isNull(drawable)) {
    drawable = getRandomDrawable();
}

使用google guava libs來處理is-null-check(deamon的更新)

Drawable drawable = Optional.of(Common.getDrawableFromUrl(this, product.getMapPath())).or(getRandomDrawable());

if (drawable == null) {
  ...
}

equals()方法檢查相等性,這意味著它比較兩個對象的內容 。 由於null不是對象,因此在嘗試將對象的內容與null的內容進行比較時會崩潰。

==運算符檢查引用相等性,這意味著它查看這兩個對象實際上是否是同一個對象 。 這不要求對象實際存在; 兩個不存在的對象( null引用)也是相等的。


drawable.equals(null)

上面的行在drawable對像上調用“equals(...)”方法。

因此,當drawable不為null並且它是一個真實對象時,一切順利,因為調用“equals(null)”方法將返回“false”

但是當“drawable”為null時,則意味著在null對像上調用“equals(...)”方法,意味著在不存在的對像上調用方法,因此拋出“NullPointerException”

要檢查對像是否存在且不為null,請使用以下命令

if(drawable == null) {
    ...
    ...
}

在上面的條件中,我們檢查引用變量“drawable”是否為null或包含一些值(對其對象的引用),因此如果drawable為null則不會拋出異常作為檢查

null == null

已驗證。


我用這種方法:

if (null == drawable) {
  //do stuff
} else {
  //other things
}

這樣我發現提高了行的可讀性 - 當我通過源文件快速讀取時,我可以看到它是一個空檢查。

關於為什麼你不能在一個可能為null對像上調用.equals() ; 如果你擁有的對象引用(即'drawable')實際上是null ,則它不指向堆上的對象。 這意味著堆上沒有對象, equals()的調用可以成功。

祝你好運!


捕獲NullPointerException可能稍微有點效率。 上述方法意味著運行時檢查兩次空指針。


if (yourObject instanceof yourClassName) yourObjectnull if (yourObject instanceof yourClassName)將評估為false


你可以用兩個選項來做到這一點。

首先簡單的方法。

將.jar文件複製到剪貼板,然後將其添加到libs文件夾。 要查看項目中的libs文件夾,請從文件夾上方的組合框中選擇項目。

然後右鍵單擊.jar文件並單擊添加為庫,然後選擇一個模塊,然後確定。 你可以在依賴塊中的build.gradle文件中看到.jar文件。

 dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:21.0.3'
        compile project(':okhttp-2.0.0')
        compile 'com.google.code.gson:gson:2.3.1'
    }

第二種方法是:通過將.jar文件作為.jar模塊導入,然後將此模塊添加到我們想要的任何模塊,我們可以將.jar文件添加到模塊。

導入模塊--->選擇你的.jar文件 - >比import導入為.jar -

然後CTRL + ALT + SHIFT + S - >項目結構 - >選擇你想要的模塊添加一個jar - > Dependencendies - > Module Dependency。 模塊的build.gradle會自動更新。





java android