JSON-Simple导致编译器警告"类型安全:方法put(Object,Object)属于原始类型HashMap。"

时间:2016-02-17 09:48:49

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

我刚遇到需要将数据放入JSONObject的情况,而这样做我收到了编译器的警告。

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

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

我正在使用以下代码,其中option是Object。

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

这是如何引起的?如何解决?

5 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:6)

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

我遇到了这个问题,过了一会儿,我设法使用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及更高版本。

答案 2 :(得分:0)

如果option.isShowOppo()返回布尔值。尝试布尔值= option.isShowOppo();然后是additionalDetails.put(“showOppo”,value);

答案 3 :(得分:0)

我最近遇到了这个问题。有两个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

答案 4 :(得分:0)

为了避免警告并更好地工作,我对此进行了更改(当 JSONObject AdditionalDetails时)

 JsonPath.parse(additionalDetails).set(fieldPath, Value);