List转数组:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

本文详细介绍了在Java中如何将List<String>转换为String数组,并解释了使用toArray()方法时可能出现的类型转换错误。重点讲解了如何通过指定数组类型避免Object[]到String[]的转换问题,以及提供了多种解决方案,包括使用toArray(T[] a)重载方法和创建新的目标类型数组。同时,强调了在进行类型转换时应注意的细节和最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List.toArray()强制类型转换报错: 

List<String> list= new ArrayList<String>();
//根据小区id查询人行闸机
List<ResourceShadow> shadowList = queryAreaEntranceBrakesByPlace(dgpData.getProjectid(), communityid);
if(shadowList != null && shadowList.size() >0){
	for (ResourceShadow resourceShadow : shadowList) {
		list.add(resourceShadow.getResid());
	}
}
//人行闸机id
String[] brakeIdArr = (String[]) list.toArray();

 原因是:不能将Object[] 转化为String[],转化的话只能是取出每一个元素再转化,

java中的强制类型转换只是针对单个对象的,想要偷懒将整个数组转换成另外一种类型的数组是不行的。

Object[] arr = list.toArray();
for (int i = 0; i < arr.length; i++) {
	String e = (String) arr[i];
	System.out.println(e);
}

ArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:

1.list.toArray();

2.list.toArray(T[]  a);

对于第一个重载方法,是将list直接转为Object[] 数组;

第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型。

改成下面这样更方便:

//参数指定空数组,节省空间

String[] brakeIdArr = (String[]) list.toArray(new String[0]);

还可以这样写:

String[] y = x.toArray(new String[x.size()]);

new String[0]只是为了指定函数的形参数,最终返回的String[]的长度是由你的list存储内容的长度决定 

list.toArray(new String[0]);//转化成String数组

list.toArray(new int[0]);   //转化成int数组

https://blog.youkuaiyun.com/tomcat_2014/article/details/51164080

https://www.cnblogs.com/zzzzw/p/5171221.html

https://www.cnblogs.com/goloving/p/7693388.html

https://blog.youkuaiyun.com/defineshan/article/details/52763637?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control

https://blog.youkuaiyun.com/jjdhshdahhdd/article/details/8290555?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值