java - org.json.simple.JSONArray 设计的不好吗?

标签 java json generics

<分区>

我从https://stackoverflow.com/a/20445493/2848676知道以下代码给出错误 type mismatch cannot convert from element type object to string :

ArrayList objectArray = new ArrayList();
for (String str : objectArray) {

编译器在我的 objectArray 声明中警告我 ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized .这一切对我来说都很有意义。解决方法是指定通用类型:

ArrayList<String> stringArray = new ArrayList<String>();
for (String str : stringArray) {

这避免了编译器警告和编译错误。

但我的问题是我正在尝试迭代 ArrayList 的一个子类 org.json.simple.JSONArray而且我无法控制 JSONArray 的实例化方式。因此,我在任何地方都没有看到编译器警告,但我确实在这个 for 中遇到了编译错误。循环代码行:

JSONArray insights = (JSONArray)jsonResult.get("insights");
for (JSONObject insightGroup : insights) {

我知道我可以像这样解决这个问题:

JSONArray insights = (JSONArray)jsonResult.get("insights");
for (int i=0; i<insights.size(); i++) {
    JSONObject insightGroup = (JSONObject) insights.get(i);

但是有人可以解释泛型类型的优点吗?特别是,org.json.simple.JSONArray 怎么能在不指定泛型类型的情况下被实例化?是org.json.simple.JSONArray只是设计不好?或者我没有使用 org.json.simple.JSONArray正确吗?

最佳答案

Is org.json.simple.JSONArray just poorly designed?

在我看来,是的,但不是因为您描述的原因。

JSON 数组可以包含任何 JSON 值类型,而不仅仅是 JSON 对象。所以

for (JSONObject insightGroup : insights) {

不应该被允许,现在也不是。 JSONObject 类型表示一个 JSON 对象。但是 JSONArray 可以包含 String 值、其他 JSONArray 值、数值、null 或其他 JSONObject 值。

JSON格式描述here .

也许这就是 JSONArray 被实现为扩展和实现原始 List 类型的原因,which is typically not a good idea.

关于java - org.json.simple.JSONArray 设计的不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936436/

相关文章:

json - 在 Swift 中查询本地 JSON 文件

java - 如何获得多个句子的整体情绪

java - 我遇到与本地主机相关的错误。我正在尝试实现多线程服务器客户端聊天服务器

json - 将 git 日志文件名解析为 json

javascript - 如何计算数组中的项目数

java - 如何在 Scala 中扩展包含泛型方法的 Java 接口(interface)?

java - 在Java中将对象添加到空数组中

java - 如何为 Swift 语言创建 Java ANTLR 解析器?

java - Java中如何传递泛型参数

java - 在 Java 中定义泛型方法的最佳方式是什么?