【问题标题】: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,所以我不确定当relatedSpacenull 时我的代码怎么可能抛出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 方法并直接执行检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-02
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2017-10-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多