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

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.csdn.net/tomcat_2014/article/details/51164080

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

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

https://blog.csdn.net/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.csdn.net/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

猜你喜欢

转载自blog.csdn.net/ZHOU_VIP/article/details/110875603