JSONObject未经检查的调用put(K,V)作为原始类型java.util.HashMap的成员

时间:2018-11-09 12:40:32

标签: java json

下面的代码产生以下编译器警告:

JSONObject obj = new JSONObject();
obj.put("foo", "bar");

编译器消息:

  

未选中的调用put(K,V)作为原始类型的成员   java.util.HashMap

我通过JSONObject.put()用值填充JSONObject,然后调用obj.toString()来获取json。我该如何解决以上警告(我使用-Werror进行编译)。

JSONObject来自以下库。

import org.json.simple.JSONObject;

Maven依赖项:

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

4 个答案:

答案 0 :(得分:1)

json-simple库使用旧的字节码版本:46.0​​编译。这是Java 1.2。 JSONObject映射扩展了java.util.HashMap,您可以直接使用java.util.HashMap的“ put”方法

在Java 5中添加了泛型。从Java 5开始,编译器鼓励使用泛型类型。编译器建议,通过这种方式,您应该升级代码以使其更加类型安全。

在这种情况下,不安全的用法来自库,您无法控制它。我建议搜索该库的较新版本或切换到另一个库。

更新:您可以尝试以下库:

    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180813</version>
    </dependency>

用法:

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.Arrays;
import java.util.Collections;

public class Main {

    public static void main(String[] args) {
        JSONObject obj = new JSONObject();
        obj.put("hello", "world");
        obj.put("collection", new JSONArray(Arrays.asList(1, "two", Collections.singletonMap("three", 30))));
        System.out.println("obj.toString() = " + obj.toString());
    }
}

答案 1 :(得分:1)

由于object item在内部使用原始类型集合,因此您将收到此警告。

  

公共类JSONObject扩展了HashMap ...

如果要消除此警告,可以在代码中添加以下注释。

org.json.simple.JSONObject

甚至更好的是,您可以尝试使用支持泛型的库...

答案 2 :(得分:0)

您可以通过将该警告显式转换为所需的类型来消除该警告

let builder = require('xmlbuilder', { encoding: 'utf-8' });
let name = "ABC";
let xml = builder.create('Slides');
xml.ele('props',"Hello");
xml.ele('name')
   .ele("Hello", name);
xml.end({ pretty: true });
console.log(xml.toString())

但是您有时会遇到另一个警告。

<Slides>
  <props>Hello</props>
  <name>
    <Hello>ABC</Hello>
  </name>
</Slides>

这是因为类JSONObject从HashMap扩展而来,但没有指定与Hashmap相同的泛型。

答案 3 :(得分:0)

尽管我不会将其称为最佳解决方案,但是如果您真的想在没有任何警告的情况下使用相同的库,则可以使用

Map<String,String> jsonMap = new HashMap<>();
jsonMap.put("foo", "bar");
JSONObject obj = new JSONObject(jsonMap);

这将在没有任何警告的情况下起作用,并且可以满足您的需求。