JSON-Simple 导致编译器警告“类型安全:方法 put(Object, Object) 属于原始类型 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());

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


答案 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);

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

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


答案 2

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

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

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

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


推荐