непроверенный вызов add(E) в качестве члена необработанного типа ArrayList и HashMap

У меня есть следующая функция, которая использует org.json.simple для создания объекта JSON.

public JSONObject createJSONRequest() {
    // /* Create JSON Objects */
    JSONObject jsonObject = new JSONObject();
    Map<String, String> map = new HashMap<String, String>();

    map.put(ACCESS_TOKEN_KEY, mAccessToken);            
    map.put(SESSION_ID_KEY, mSessionId);
    map.put(SNAPZ_ID_KEY, mSnapzId);
    map.put(EMAIL_KEY, mEmail);
    map.put(EMAIL_PWD_KEY, mEmailPwd);

    JSONArray list = new JSONArray();
    list.add(map);
    jsonObject.put("parameters", list);
    jsonObject.put("function", "verifyEmail");

    return jsonObject;
}

Однако я продолжаю получать это предупреждение, когда использую средство проверки ворса.

[unchecked] unchecked call to add(E) as a member of the raw type ArrayList
        list.add(map);
                ^
where E is a type-variable: E extends Object declared in class ArrayList

 warning: [unchecked] unchecked call to put(K,V) as a member of the raw type HashMap
        jsonObject.put("parameters", list);
                      ^
where K,V are type-variables:
    K extends Object declared in class HashMap
    V extends Object declared in class HashMap

warning: [unchecked] unchecked call to put(K,V) as a member of the raw type HashMap
        jsonObject.put("function", "verifyEmail");

Я попытался использовать общий тип. HashMap использует дженерики, а другие объекты JSONObject JSONArray — нет.

Большое спасибо за любые предложения,


person ant2009    schedule 03.07.2014    source источник
comment
Откуда JSONArray, JSONObject?   -  person laune    schedule 03.07.2014
comment
Предположение: см. code.google.com/p/json-simple/source/browse/trunk/src/main/java/ и code.google.com/p/json-simple/issues/detail?id=84 (это означает, что вы можете не избежать этих предупреждений, кроме как путем их подавления...)   -  person Marco13    schedule 03.07.2014
comment
@ Марко13 Спасибо. - А так просто было бы написать class JSONArray<E> extends ArrayList<E> {.   -  person laune    schedule 03.07.2014
comment
@ ant2009 Если это из библиотеки json-simple (как я предполагаю), то вы можете добавить тег json-simple (и я могу превратить комментарий в ответ ...)   -  person Marco13    schedule 03.07.2014


Ответы (1)


Вы получаете это предупреждение, потому что библиотека использует коллекции необработанных типов для внутреннего использования. Чтобы скрыть это предупреждение, вы аннотируете свой метод с помощью @SuppressWarnings("unchecked").

Если вы хотите использовать библиотеку json с поддержкой дженериков. Вы можете использовать Google GSOn. Я сам использовал его во многих проектах. Это легко и использует общие коллекции.

person bitkot    schedule 03.07.2014
comment
поэтому в ответе никогда не используйте com.googlecode.json-simple, потому что кто будет аннотировать все в коде? - person user25; 27.01.2019