[问题]:“[Ljava.lang.Object; cannot be cast to [Ljava.lang.Long;“

通过stream流的形式从数据库中查出一个集合:
List<Long> modeId = scpRoleModMapper.selectScpRoleModByIdList(authConfigRequesBean.getRoleId())
                .stream()
                .filter(Objects::nonNull)
                .map(scpRoleMod -> scpRoleMod.getModelId())
                .collect(Collectors.toList());

将集合转换成数组的形式:

(1)、Long [] ids = (Long [])modeId.toArray();

(2)、Long[] ids= new Long[modeId.size()];

        modeId = modeIdList.stream().toArray(modeId);

使用以上两种方式将list转换为Long[]数组时候产生:[Ljava.lang.对象;无法转换为[Ljava.lang.Long;的异常,是因为.toArray()转换数组是Object[],相当于初始化数组就是Object[]类型,Object[]数组通过强转是无法转换为其他类型的数组(注意),但是一开始初始化数组为基本数据类型或者包装类,先转换为object[]数组,可以通过强转的形式将Object[]数组转换为初始化类型的数组。

原因:主要是底层源码 的原因,想要了解可以链接了解一下:(8条消息) Java数组 强制类型转换_划水大圣的博客-CSDN博客_java数组强制类型转换

 

解决方法:

1、笨方法:循环转数组


        int size = modeId.size();
        Long[] ids = new Long[size];
        for (int i = 0; i < size; i++) {
            ids[i] = modeId.get(i);
        }

2、经过查阅资料和博客和自己测试推荐的方法(通过stream流的形式解决)

Long[] ids = modeId.stream().toArray(Long[]::new);

以上两种方式均可以使用,但是推荐第二种,希望可帮助到大家!!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,抛出java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Long;的错误是由于将一个对象数组强制转换为Long类型数组时发生的。这种错误通常发生在Java中,当我们试图将一个对象转换为不兼容的类型时。 以下是一个示例代码,演示了如何抛出java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Long;的错误: ```java Object[] objArray = new Object[]{"1", "2", "3"}; Long[] longArray = (Long[]) objArray; // 这里会抛出java.lang.ClassCastException错误 ``` 在上面的代码中,我们将一个包含字符串的对象数组objArray强制转换为Long类型数组longArray。由于字符串和Long类型是不兼容的,所以会抛出java.lang.ClassCastException错误。 要解决这个问题,我们需要确保将对象数组转换为正确的类型。在上面的例子中,如果我们想要将字符串数组转换为Long类型数组,我们可以使用循环遍历并逐个转换数组中的元素,然后将其存储在Long类型的新数组中。 以下是一个修复错误的示例代码: ```java Object[] objArray = new Object[]{"1", "2", "3"}; Long[] longArray = new Long[objArray.length]; for (int i = 0; i < objArray.length; i++) { longArray[i] = Long.parseLong((String) objArray[i]); } ``` 在上面的代码中,我们创建了一个新的Long类型数组longArray,并使用循环遍历将字符串数组objArray中的每个元素转换为Long类型,并将其存储在longArray中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值