【问题标题】:Gson isJsonObject() throws NullPointerException [duplicate]Gson isJsonObject() 抛出 NullPointerException [重复]
【发布时间】:2017-06-12 17:28:54
【问题描述】:
我有以下代码:
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 来解决问题,但我想知道为什么会发生这种情况。
【问题讨论】:
标签:
java
nullpointerexception
gson
nul
【解决方案1】:
. 运算符在它之后的方法之前执行。
如果对象是null,无论方法的内容如何,都会导致NullPointerException。
【解决方案2】:
因为在您在此处描述的情况下,relatedSpace 设置为 null(在使用之前)。你实际上是从下面的表达式中得到null -
final JsonElement relatedSpace = source.get("myField");
(这意味着你不是与键“myField”关联的JsonElement)
为了避免 null 你可以简单地在使用它之前检查它 -
if(null!=relatedSpace && relatedSpace.isJsonObject()){
//do something
}
有关如何避免NullPointerException 的更多信息,您可以查看these nice suggestions
【解决方案3】:
您正在获得 NPE,因为您正在对空引用进行方法调用。您对java中的运算符和方法感到困惑。 instanceof 是 java 中的一个运算符,它也适用于空引用,但是调用空引用的方法是一种例外情况,应该通过空检查来处理。您可以做的其他事情是完全放弃 GSON 方法并直接执行检查。