不用管我下面的第一个答案。我读得太快了。
看起来这是一个简单的例子,文件撒谎-或者至少是被误解了。幸运的是,代码并不是那么简单,而且gson是一个开源项目。
这是 JsonObject.get(String)
:
/** * Returns the member with the specified name. * * @param memberName name of the member that is being requested. * @return the member matching the name. Null if no such member exists. */ public JsonElement get(String memberName) { if (members.containsKey(memberName)) { JsonElement member = members.get(memberName); return member == null ? JsonNull.INSTANCE : member; } return null; }
这里是 members
人口:
/** * Adds a member, which is a name-value pair, to self. The name must be a String, but the value * can be an arbitrary JsonElement, thereby allowing you to build a full tree of JsonElements * rooted at this node. * * @param property name of the member. * @param value the member object. */ public void add(String property, JsonElement value) { if (value == null) { value = JsonNull.INSTANCE; } members.put($Gson$Preconditions.checkNotNull(property), value); }
添加到 members
是为Java类中定义的每个成员创建的-它不是基于JSON中的内容。(对于有兴趣的人来说,visitFieldsReflectively
方法ReflectingFieldNavigator
(人口成员。)
因此,我想混淆了“如果没有议员”这一句中“成员”一词的含义。基于代码,我认为JavaDoc的作者指的是Java类中定义的一个成员。对于gsonAPI的临时用户-就像我自己一样-我假设“成员”指的是JSON中的一个对象元素。
现在,这个问题清楚了吗?
基于快速阅读问题的第一个答案(为有用的链接保留):
A null
引用不是 JsonNull
价值。(value == null)
与value.isJsonNull()
。他们很不一样。
文档描述了调用 JsonObject.get(String)
如果不存在这样的成员,则返回“[null]”。他们没有这么说 JsonNull
会被归还。
打电话给 JsonElement.isJsonNull()
不是检查 JsonElement
引用是null
推荐信。事实上,如果是null
引用时,对其调用方法将引发NullPointerException
。它在检查它是否是JsonNull
举个例子。