2010-04-15 1 views
7

Я использую JSON.simple для генерации вывода JSON с Java. Но каждый раз, когда я называю jsonobj.put («это», «что»), я вижу предупреждение в Eclipse:Как избежать предупреждений Eclipse при использовании устаревшего кода без дженериков?

Тип безопасности: Метод пута (Object, Object) принадлежит к сырому типу HashMap. Ссылки на шаблонный типе HashMap должны быть параметризованными

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

ответ

7

Вот один из вариантов. Это немного уродливо, но позволяет вам охватить подавленное предупреждение только для этой отдельной операции.

Добавить функцию, которая делает непроверенный бросок, и подавить предупреждения о нем:

@SuppressWarnings("unchecked") 
private final static Map<Object,Object> asMap(JSONObject j) 
{ 
    return j; 
} 

Тогда вы можете назвать это без предупреждений компилятора:

asMap(jsonobj).put("this", "that"); 

Таким образом, вы можете быть уверены в том, что вы не подавляете никаких предупреждений, которые вы действительно хотите увидеть.

+0

В Netbeans, который возвращает ДРУГОЙ набор предупреждений для меня: > Частный метод aMap объявлен окончательным > Частный метод aMap объявлен статическим – user919860

4

У вас могут быть настройки компилятора для каждого проекта, и вы можете изменить эти предупреждения на игнорировать.

+3

Это еще более экстремально, чем добавление @SuppressWarnings ("unchecked") к соответствующим методам; моя проблема в том, что я хотел бы видеть как можно больше предупреждений, подавляя это. –

+0

вы можете подавить это конкретное предупреждение в своей устаревшей конфигурации проекта. ничего экстремального в этом нет. –

+0

это экстремально, потому что * его * проект не является наследием, а только библиотекой, на которую он ссылается. Ваше предложение заключается в том, чтобы весь его проект подавил предупреждения. – Kip

4

Напишите некоторые вспомогательные методы или классы-оболочки для библиотеки. Добавьте @SuppressWarnings("unchecked") только этим помощникам. Затем используйте помощники для взаимодействия с библиотекой.

+0

Кажется, это лучшее решение, спасибо. Затмение просто неправильно, чтобы предупредить меня об этом, не так ли? Эти ошибки должны быть в коде JSONObject, а не в моем коде. –

+0

@Paul: Eclipse прав, потому что это так, как указано для Java. Вы получаете предупреждение, потому что вы используете необработанный метод из HashMap (вы вынуждены это делать, потому что JSONObject расширяет HashMap). –