JSON 简单原因编译器警告"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());

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

我不知道

你是否仍然有这个问题,但我认为它会让遇到这个问题的其他人受益。

遇到了这个问题,过了一会儿,我设法使用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);

如果您不知道哈希映射将包含哪种类型,或者它是否包含多种类型,则使用 Object 更安全。否则,请使用正确的类型。

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

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

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

不幸的是,您无法避免警告。

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

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

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

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

if option.isShowOppo(( 返回布尔值。尝试布尔值= option.isShowOppo((;然后是 additionalDetails.put("showOppo",value(;

最新更新