Java中的JSON和泛型 - 类型安全警告

Ita*_*Gal 10 java eclipse generics json

我有一些数据存储在Java元素中,我需要以给定的格式返回它 - JSONObject.虽然我的实现工作正常,但我仍然收到来自eclipse的警告消息(版本:Juno Service Release 2):

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

这是我的代码:

public interface Element {...}

public abstract class AbstractElement implements Element {...}

public final class Way extends AbstractElement {...}

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

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

public class WayToJsonConverter{
    ...
    public JSONObject wayToJson(){
        JSONObject obj = new JSONObject();
        obj.put("id",way.getId());
        ...
        return obj;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

问题在于: obj.put("id",way.getId());

除了添加之外,有没有办法解决这个问题@SuppressWarnings("unchecked")

lte*_*ean 14

你的JSONObject是什么,它是从HashMap继承的吗?如果是,warn可能意味着你应该声明JSONObject实例,如下所示:

JSONObject<String,Object> obj=new JSONObject<String,Object>();
Run Code Online (Sandbox Code Playgroud)

更新:查看JSONObject的定义:

public class JSONObject extends HashMap
Run Code Online (Sandbox Code Playgroud)

它扩展了HashMap但不支持参数类型,如果它的定义是

public class JSONObject<K,V> extends HashMap<K,V>
Run Code Online (Sandbox Code Playgroud)

然后我们可以写

JSONObject<String,Object> obj=new JSONObject<String,Object>();
Run Code Online (Sandbox Code Playgroud)

并且put方法将不再生成警告

  • 我发现它扩展了HashMap,但在类定义中没有类型参数,所以我们什么都不做,而不是在这里添加@SuppressWarnings("unchecked")...... (21认同)
  • 当我试图这样做时,我收到消息:"类型JSONObject不是通用的;它不能使用参数<String,Object>参数化" (15认同)
  • 你能在答案中添加最后评论的内容吗?你是第一个解释为什么这不能解决的人,我想接受你的回答. (3认同)