代码之家  ›  专栏  ›  技术社区  ›  Ori Marko

泛化JSONObject字符串键

  •  -1
  • Ori Marko  · 技术社区  · 6 年前

    我有使用的现有代码 org.json.JSONObject

    JSONObject obj = new JSONObject();
    obj.put("key1", "value1");
    obj.put("key2", "value2");
    Iterator keys = obj.keys();
    ...
    

    带有编译警告

    Iterator is a raw type. References to generic type Iterator<E> should be parameterized
    

    我可以更新到通用版本:

    Iterator<?> keys = obj.keys();
    

    JSONObject String 钥匙?

    我发现 this answer 但它的建议没有得到采纳

    JSONObject<String,Object> obj=new JSONObject<String,Object>();
    

    编辑

    使用 Iterator<String> keys = obj.keys(); 我收到一个类型安全警告:

    Type safety: The expression of type Iterator needs unchecked conversion to conform to Iterator<String>
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   D.B.    6 年前

    您提供的链接所指向的答案使用的类与您正在使用的类不同。如果你看 source 对于 org.json.JSONObject 您将发现以下内容:

    public Iterator<String> keys() {
        return this.keySet().iterator();
    }
    

    这意味着您可以编写以下代码:

        JSONObject obj = new JSONObject();
        obj.put("key1", "value1");
        obj.put("key2", "value2");
        Iterator<String> keys = obj.keys();
    
        while(keys.hasNext()){
            System.out.println(keys.next());
        }
    

    它将生成以下输出:

    key1
    key2