[英]Java Syntax: JSONArray array = (JSONArray)obj
我正在学习用Java解码JSON文件,并且遇到了一些我不理解的语法。 我也是Java的新手。 这是代码片段:
Object obj = JSONValue.parse(jsonResult);
JSONArray array = (JSONArray)obj;
在我对程序员的最大尝试下,我了解“ JSONArray”是一个类。 我们正在实例化一个新的JSONArray并将其称为“数组”。 我们正在使用等号右侧的值初始化“数组”。
我的问题是-我不明白等号右侧发生了什么。 为什么括号中的(JSONArray)obj为“ JSONArray”? 我不明白这里发生了什么。
谢谢!
这是(未检查的)类型转换的示例。 我建议您首先使用类型比较运算符instanceof
使用检查过的类型转换。 就像是,
JSONArray array = null;
Object obj = JSONValue.parse(jsonResult);
if (obj instanceof JSONArray) {
array = (JSONArray)obj;
}
如果确定它将始终是JSONArray
,则可以在一行中执行,例如
JSONArray array = (JSONArray) JSONValue.parse(jsonResult);
之所以必须进行强制转换,是因为parse()
的结果是一个Object
。
作为最外层结构,接收到的JSON可以是“对象”(地图)或“数组”(列表)。 JSONValue.parse(jsonResult)
生成JSONObject或JSONArray,具体取决于jsonResult
字符串中最外面的结构类型。 因此,必须声明parse
方法以返回这两个类的某个公共“祖先”。 JSON-Simple是一个相当粗糙的JSON套件,除了Object以外,这两个类没有通用的超类。
在这种情况下,程序员大概知道接收到的数据将始终具有JSON“数组”作为最外层结构。 他最初将来自parse
的结果放入一个Object引用中(因为Object是从parse
返回的形式类型),然后将该值转换为JSONArray。
正如艾略特(Eliot)所建议的那样,至少从形式上来讲,最好包含一个instanceof
,或者,如果使用的不是JSON-Simple套件,则可以为这两个类使用通用父类上的接口允许查询其类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.