如何将哈希图插入对象数组

时间:2018-11-23 15:50:15

标签: java dictionary object hashmap

有人可以解释为什么这样吗:

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 :(得分:3)

您必须将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方法。

另请参阅this有关投射的问题。

答案 1 :(得分:1)

您绝对可以有一个Objects数组,其中每个对象都是HashMap。第二个代码段的唯一问题是,在运行时,编译器不知道IEXDivMap [i]的类型(不知道它指向HashMap类型的对象)。因此,在那个时候,它只会向用户公开在Object类本身上定义的那些方法,而不在HashMap类中定义的那些方法。

如果将IEXDivMap [i]转换为像-> ((HashMap)IEXDivMap[i])这样的HashMap,则如果IEXDivMap [i]引用的对象实际上是HashMap,则编译器将调用HashMap类中定义的方法