繁体   English   中英

Java语法:JSONArray array =(JSONArray)obj

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM