2017-06-12 54 views
0

我有以下代碼:GSON isJsonObject()拋出的NullPointerException

final JsonObject source = source.toJson(); 
final JsonElement relatedSpace = source.get("myField"); 
if(relatedSpace.isJsonObject()){ 
    //do something 
} 

isJsonObject()確實return instanceof JsonObject;根據所述GSON代碼。 instanceof應該先做一個null檢查,所以我不確定在relatedSpacenull時我的代碼是否可能拋出NullPointerException。我可以輕鬆地檢查null首先解決問題,但我想知道爲什麼會發生這種情況。

回答

2

.運營商執行之前其後的方法。

如果對象是null它將導致NullPointerException,而不管該方法的內容如何。

1

因爲relatedSpace設置爲null(在使用之前)在這裏描述的情況。實際上,你從下面的表達式得到null -

final JsonElement relatedSpace = source.get("myField"); 

(這意味着你沒有JsonElement與關鍵「myField」相關聯)

要避免空使用它之前,你可能只是簡單地檢查它 -

if(null!=relatedSpace && relatedSpace.isJsonObject()){ 
    //do something 
} 

更多關於如何避免NullPointerException您可以檢查these nice suggestions

0

您正在獲取NPE,因爲您正在對空引用執行方法調用。你感到困惑的是在java中的運算符和方法之間。 instanceof是java中的一個運算符,它也與空引用一起工作,但對null引用的方法調用是一個特殊情況,應該由null檢查來處理。其他的事情是你可以完全拋棄GSON方法,並直接執行檢查。

相關問題