0

我有以下代码:

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

isJsonObject()return instanceof JsonObject;根据 Gson 代码执行。instanceof应该先做一个null检查,所以我不确定我的代码怎么可能抛出NullPointerExceptionwhen relatedSpaceis null。我可以很容易地null首先检查以解决问题,但我想知道为什么会发生这种情况。

4

3 回答 3

3

.运算符在其后的方法之前执行。

如果对象是,无论方法的内容如何,null​​都会导致.NullPointerException

于 2017-06-12T17:31:18.430 回答
2

因为在您在此处描述的情况下relatedSpace设置为null(在您使用它之前)。您实际上null从以下表达式中得到 -

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

(这意味着你没有JsonElement与键“ myField”关联)

为了避免 null 你可以简单地在使用它之前检查它 -

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

有关如何避免的更多信息,NullPointerException您可以查看这些不错的建议

于 2017-06-12T17:36:00.177 回答
0

您正在获得 NPE,因为您正在对空引用进行方法调用。您感到困惑的是Java中的运算符和方法之间的关系。instanceof 是 java 中的一个运算符,它也适用于空引用,但是调用空引用的方法是一种例外情况,应该通过空检查来处理。您可以做的其他事情是完全放弃 GSON 方法并直接执行查看。

于 2017-06-12T17:38:08.007 回答