【问题标题】:JSON-Simple causes compiler warning "Type safety: The method put(Object, Object) belongs to the raw type HashMap."JSON-Simple 导致编译器警告“类型安全:方法 put(Object, Object) 属于原始类型 HashMap。”
【发布时间】:2016-02-17 09:48:48
【问题描述】:

我刚遇到需要将数据放入 JSONObject 的情况,同时我收到了来自编译器的警告。

类型安全:方法 put(Object, Object) 属于原始类型 HashMap。对泛型 HashMap 的引用应该被参数化。

我试图参数化 JSONObject,但它给了我错误。

我正在使用以下代码,其中选项是一个对象。

JSONObject additionalDetails = new JSONObject();
additionalDetails.put("showOppo", option.isShowOppo());
additionalDetails.put("showCont", option.isShowCont());
additionalDetails.put("contActionTaken", option.isConActionTaken());
additionalDetails.put("oppoActionTaken", option.isOppoActionTaken());

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: java generics compiler-warnings parameterized json-simple


    【解决方案1】:

    我不知道你是否还有这个问题,但我认为这会让遇到这个问题的其他人受益。

    我遇到了这个问题,过了一段时间,我设法使用 HashMap 解决了这个问题。

    HashMap<String,Object> additionalDetails = new HashMap<String,Object>();
    additionalDetails.put("showOppo", option.isShowOppo());
    additionalDetails.put("showCont", option.isShowCont());
    additionalDetails.put("contActionTaken", option.isConActionTaken());
    additionalDetails.put("oppoActionTaken", option.isOppoActionTaken());
    
    JSONObject additionalDetailsJSON = new JSONObject(additionalDetails);
    

    如果您不知道 hashmap 将保存什么类型,或者它是否保存多种类型,则使用 Object 会更安全。否则使用正确的类型。

    此解决方案适用于 json-simple 1.1.1 和 Java 1.5 及更高版本。

    【讨论】:

    • 当我尝试在构造函数中创建一个传递 HashMap 的 JSONObject 时,我得到以下结果 - 构造函数 JSONObject(HashMap) 未定义。
    • 我认为这应该是公认的答案!谢谢!
    • 是的,这应该是公认的答案,就像一个魅力,这似乎是正确的做法。
    【解决方案2】:

    您正在使用 JSON Simple。它的JSONObject 派生自HashMap,但不幸的是不使用泛型参数(可能是因为它是在泛型前时代创建的)。因此,您看到的警告与以下内容相同:

    HashMap map = new HashMap();
    map.put("showOppo", option.isShowOppo());
    

    很遗憾,您无法避免警告。

    我建议切换到另一个 JSON 库,例如 GSON 或 Jackson。

    【讨论】:

    【解决方案3】:

    为了避免警告并更好地工作,我这样更改它(当 JSONObject additionalDetails)

    import com.jayway.jsonpath.JsonPath;
    
     JsonPath.parse(additionalDetails).set(fieldPath, Value);
    

    【讨论】:

      【解决方案4】:

      如果 option.isShowOppo() 返回布尔值。试试 Boolean value= option.isShowOppo();然后additionalDetails.put("showOppo",value);

      【讨论】:

        【解决方案5】:

        我最近遇到了这个问题。JSONObject 有两个库,这让您感到困惑 您使用了错误的json jar json-simple-1.1.jar,您导入的包是org.json.simple.JSONObject,使用java-json.jar 并从http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm 导入org.json.JSONObject 下载jar

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-04
          • 2014-05-09
          • 2018-05-16
          • 2012-04-07
          • 1970-01-01
          • 2014-02-04
          • 2013-10-14
          相关资源
          最近更新 更多