Gson isJsonObject() 抛出 NullPointerException

Gson isJsonObject() throws NullPointerException

我有以下代码:

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

isJsonObject() 根据 Gson 代码执行 return instanceof JsonObject;instanceof 应该首先进行 null 检查,所以我不确定当 relatedSpacenull 时我的代码怎么可能抛出 NullPointerException。我可以先轻松检查 null 来解决问题,但我想知道为什么会这样。

. 运算符先于 执行它之后的方法。

如果对象是 null,它将导致 NullPointerException,无论方法的内容如何。

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

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

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

为了避免空值,您可以在使用前简单地检查它 -

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

有关如何避免 NullPointerException 的更多信息,您可以查看 these nice suggestions

您收到 NPE 是因为您正在对空引用执行方法调用。您感到困惑的是 java 中的运算符和方法。 instanceof 是 java 中的一个运算符,它也适用于 null 引用,但是对 null 引用的方法调用是一个例外情况,应该由 null check.Other 处理,你可以做的就是完全放弃 GSON 方法并直接检查实例。