mybatis用map接收多个对象,value用object接收,如何把其中的值取出来?

Map<String, Object> 这样接收数据,查询key对应的value是object,但这个object实际上是hashmap,直接用object.get取数据会报错,该如何取object里面的数据?

可以将其强制转换为HashMap类型,然后使用get()方法从中获取数据。下面是一种可能的解决方法:

Map<String, Object> map = new HashMap<>();
// 假设您已经将数据存储在map中

Object obj = map.get("key");
if (obj instanceof HashMap) {
    HashMap<String, Object> innerMap = (HashMap<String, Object>) obj;
    // 使用innerMap来操作内部的HashMap对象
    // 例如:
    Object value = innerMap.get("innerKey");
    // 对value进行进一步的处理
     if (value != null) {
        s = value.toString();
        }
} else {
    // 处理不是HashMap类型的情况
}

首先,使用get()方法从外部的Map中获取到对应的Object对象。然后,通过instanceof关键字判断该对象是否是HashMap类型。如果是,就可以将其强制转换为HashMap类型,并使用innerMap.get()方法从其中获取具体的数据。如果对象不是HashMap类型,则需要根据实际情况进行相应的处理。请注意,强制类型转换可能会导致ClassCastException异常,因此在进行强制转换之前最好进行类型检查。

下面是个实践的例子:

String s =((HashMap<String, Object>) (stringObjectMap.get(eList.get(i).getUnit()))).get("ci").toString()

大家思考一下,上面这句代码哪些地方可能产生空指针异常,该如何修改?

这句代码可能在以下两个地方产生空指针异常:

  1. stringObjectMap.get(eList.get(i).getUnit()):如果 eList.get(i).getUnit() 返回的值在 stringObjectMap 中不存在对应的键,则返回 null,那么后续的类型转换 (HashMap<String, Object>) 就会导致空指针异常。您可以通过先检查是否为 null 来避免这个问题。

  2. .get("ci"):如果之前得到的对象不是一个 HashMap,或者 HashMap 中没有名为 "ci" 的键,则调用 .get("ci") 也会导致空指针异常。您可以在调用 .get("ci") 之前,先确保对象不为空并且是一个 HashMap 对象。

下面是修改的建议代码,以防止空指针异常:

String s = "";
Object unitObj = stringObjectMap.get(eList.get(i).getUnit());
if (unitObj instanceof HashMap) {
    HashMap<String, Object> unitMap = (HashMap<String, Object>) unitObj;
    Object ciObj = unitMap.get("ci");
    if (ciObj != null) {
        s = ciObj.toString();
    }
}

在修改后的代码中,我们首先将 stringObjectMap.get(eList.get(i).getUnit()) 的结果存储在 unitObj 变量中,并进行了类型检查。如果 unitObj 是一个 HashMap 对象,我们再尝试从中获取 "ci" 的值,并将其存储在 ciObj 中。最后,我们通过检查 ciObj 是否为空,来决定是否将其转换为字符串并赋值给 s。这样可以避免空指针异常的发生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值