Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

本文探讨了在自定义集合类中遇到的数组转换问题,具体表现为Object[]无法直接转换为String[]。作者通过分析错误原因,提出了解决方案,即使用反射机制动态生成指定类型的数组,并通过Array.set方法正确填充元素,从而避免ClassCastException。测试代码展示了修复后的转换方法。
摘要由CSDN通过智能技术生成

自定义集合类时,发现了一个小细节,就随手记录了一下…

//定义一个数组,用于存储数据的容器
private E[] dataArray = (E[]) new Object[10];
	//定义一个变量,用于表示元素个数
private int size = 0;

public <T> T[] toArray(T[] a){
	T [] arraylist = (T[]) new Object[this.size];
	for (int i =0;i<size;i++){
				arraylist[i] = (T) this.dataArray[i];
		}
			return arraylist;
}

测试代码:

List<String> list = new MyList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");

String[] array = list.toArray(new String[0]);
for (String string: array){
		System.out.println(string);
	}

发现报错了:Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

原因是:

  • Object 可以转 String

  • Object[ ] 不可以转为 String[ ]

解决方法:

利用反射机制生成数组

// 想要获取数组的元素类型的class ->  getComponentType()
// 所有的数组都是属于Object类型
// 如果用a.getClass()只能获取数组的类型而不是元素的类型,会导致元素不匹配

Object array = Array.newInstance(a.getClass().getComponentType(),this.size);
for ( int i = 0; i < this.size; i++) {
		Array.set(array,i,this.dataArray[i]);
}
	return (T[])array;

// Array.set(数组对象,下标,值)
// Array.set(array,0,"aaa");
// Array.set(array,1,"bbb");
// Array.set(array,2,"bcc");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Micek

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

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

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

打赏作者

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

抵扣说明:

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

余额充值