JSON-简单导致编译器警告"Type safety: The method put(Object, Object) belongs to the raw type HashMap."

JSON-Simple causes compiler warning "Type safety: The method put(Object, Object) belongs to the raw type HashMap."

我刚刚遇到需要将数据放入 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());

这是怎么造成的,我该如何解决?

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

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

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

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

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

我不知道你是否还有这个问题,但我认为这会对遇到这个问题的其他人有所帮助。

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

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

为了避免警告并更好地工作,我将其更改为(当 JSONObject additionalDetails 时)

import com.jayway.jsonpath.JsonPath;

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