Как вставить хеш-карты в массив объектов - PullRequest
0 голосов
/ 23 ноября 2018

Может ли кто-нибудь объяснить, почему это работает:

Map[] IEXDivMap = new Map[IEXJsonArray.length()];

    for (int i = 0; i < IEXJsonArray.length(); i++) {
        IEXDivMap[i] = new HashMap();
        JSONObject IEXJsonObject = IEXJsonArray.getJSONObject(i);

        IEXDivMap[i].put("exDate",IEXJsonObject.getString("exDate"));
        IEXDivMap[i].put("amount",IEXJsonObject.getString("amount"));            

    }

, но это не так:

Object[] IEXDivMap = new Object[IEXJsonArray.length()];

    for (int i = 0; i < IEXJsonArray.length(); i++) {
        IEXDivMap[i] = new HashMap();
        JSONObject IEXJsonObject = IEXJsonArray.getJSONObject(i);

        IEXDivMap[i].put("exDate",IEXJsonObject.getString("exDate"));
        IEXDivMap[i].put("amount",IEXJsonObject.getString("amount"));            

    } 

Почему я не могу иметь массив объектов, каждый из которых является хэш-картой?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы можете определенно иметь массив объектов, каждый из которых представляет собой HashMap.Единственная проблема с вашим вторым фрагментом кода состоит в том, что во время выполнения компилятор не знает тип IEXDivMap [i] (он не знает, что он указывает на объект типа HashMap).Таким образом, в этот момент он предоставит пользователю только те методы, которые определены в самом классе Object, а не те, которые определены в классе HashMap.

Если вы приведете IEXDivMap [i] к HashMapнапример -> ((HashMap)IEXDivMap[i]), тогда компилятор вызывает методы, определенные в классе HashMap, если объект, на который ссылается IEXDivMap [i], на самом деле является HashMap

0 голосов
/ 23 ноября 2018

Вы должны привести Object к Map.

Object[] IEXDivMap = new Object[IEXJsonArray.length()];

for (int i = 0; i < IEXJsonArray.length(); i++) {
    IEXDivMap[i] = new HashMap();
    JSONObject IEXJsonObject = IEXJsonArray.getJSONObject(i);

    IEXDivMap[i].put("exDate",IEXJsonObject.getString("exDate")); // this fails
    IEXDivMap[i].put("amount",IEXJsonObject.getString("amount"));

    ((Map) IEXDivMap[i]).put("exDate",IEXJsonObject.getString("exDate")); // this works
    ((HashMap) IEXDivMap[i]).put("exDate",IEXJsonObject.getString("exDate")); // this works           

} 

Object, у которого нет метода put.

См. Также это вопрос о кастинге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...