2015-01-03 5 views
0

Я изучаю Decode JSON-файлы в Java и сталкивался с некоторым синтаксисом, который я не понимаю. Я также новичок в Java. Вот фрагмент кода:Java Синтаксис: JSONArray array = (JSONArray) obj

Object obj = JSONValue.parse(jsonResult); 
JSONArray array = (JSONArray)obj; 

В своей лучшей попытке программатора говорить, я понимаю, что «JSONArray» класс. Мы создаем новый JSONArray и называем его «массивом». Мы инициализируем «массив» со значением в правой части знака равенства.

Мой вопрос: я не понимаю, что происходит на правой стороне знака равенства. Почему «JSONArray» в скобках: (JSONArray) obj? Я не понимаю, что здесь происходит.

Спасибо!

+0

Объекты Java не имеют имен. 'array' является ссылкой, а' obj' является ссылкой. – immibis

ответ

0

Полученный JSON может, как его внешняя структура, быть либо «объектом» (Карта), либо «массивом» (списком). JSONValue.parse(jsonResult) создает либо JSONObject, либо JSONArray, в зависимости от того, какая структура является самой внешней в строке jsonResult. Поэтому метод parse должен быть объявлен для возврата некоторого общего «предка» этих двух классов. JSON-Simple - довольно грубый набор JSON, который не имеет общего суперкласса для этих двух классов, кроме Object.

Предположительно, программист в этом случае знает, что полученные данные всегда будут иметь массив «JSON» как самую удаленную структуру. Первоначально он ставит результат с parse в ссылку Object (поскольку Object является формальным типом, возвращаемым с parse), затем передает это значение JSONArray.

Как утверждает Элиот, было бы лучше, формально, по крайней мере, включить тест instanceof или, если бы кто-то использовал комплект, отличный от JSON-Simple, можно было бы использовать интерфейсы на общем суперклассе для два класса, которые разрешали запрашивать их типы.

0

Это пример (непроверенного) типа. Я предлагаю вам использовать проверенный листинг, используя оператор сравнения типов instanceof. Нечто подобное,

JSONArray array = null; 
Object obj = JSONValue.parse(jsonResult); 
if (obj instanceof JSONArray) { 
    array = (JSONArray)obj; 
} 

Если вы уверены, что это всегда будет JSONArray вы могли бы сделать это в одной строке, как

JSONArray array = (JSONArray) JSONValue.parse(jsonResult); 

Причина необходимо, чтобы бросить на все потому, что в результате parse() это Object.

Смежные вопросы