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
检查,所以我不确定当 relatedSpace
是 null
时我的代码怎么可能抛出 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 方法并直接检查实例。
我有以下代码:
final JsonObject source = source.toJson();
final JsonElement relatedSpace = source.get("myField");
if(relatedSpace.isJsonObject()){
//do something
}
isJsonObject()
根据 Gson 代码执行 return instanceof JsonObject;
。 instanceof
应该首先进行 null
检查,所以我不确定当 relatedSpace
是 null
时我的代码怎么可能抛出 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 方法并直接检查实例。