2 m0 37676512 m0_37676512 于 2017.09.09 10:01 提问

java,我使用泛型数组的时候提示unchecked cast,下有图片代码

图片说明

3个回答

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.09 10:35
已采纳

【Array.newInstance()】这个方法返回的是Object,,向上转型很自然,向下转型就需要强转
由于这个后面传入的是class,也就是通过 class来创建实例(这个是运行时才能知道类型的)

所以说程序给报个异常也是理所应当,,

【解决方法】题主可以不适用【Array.newInstance()】
自己写一个创建实例的方法,,难度不是很大吧??

有问题还可以追问。

Small_Mouse0
Small_Mouse0 回复小鼠标丶: e[0] = (E) type.newInstance();,,,,类似于这种就可以创建,,没有警告但是可能抛出两个异常,,反射new实例有异常不奇怪【throws InstantiationException, IllegalAccessException】
3 个月之前 回复
Small_Mouse0
Small_Mouse0 回复龙猫12138: 对
3 个月之前 回复
m0_37676512
m0_37676512 所以我应该自己写一个类,这个类可以创建一个泛型类型的实例,然后再多次运行这个类以达到Array.newInstance()的效果。是这样吗?
3 个月之前 回复
m0_37676512
m0_37676512 我大概理解,意思就是这个Array.newInstance()方法创建实例的时候,java不确定能不能创建这样一个类型的实例,是吗?
3 个月之前 回复
qq_36687479
qq_36687479   2017.09.09 10:18

代码我不用看,就单单你最后的问题,一个String类型把它转成Object类型之后,能直接转换成int类型吗?

caozhy
caozhy 这说得没错啊,点踩的是什么心态
3 个月之前 回复
u011315960
u011315960   2017.09.11 11:11

泛型的作用:检查操作的类型是否与希望的类型相匹配,帮助开发者审查操作的失误。

这里以List举例:泛型String表示的是List中只能加入String类型,否则就会报错。这里要注意,泛型的作用范围是List的内部的内容,而不是List本身。

你的强转会报错是因为你是对List进行了强转,泛型的作用已经超出了他的范围,所以这个会报错。

如果你想取消这个错误你可以自己写一个for循环,依次把List中的对象放入到数组中。

u011315960
u011315960 不好意思,我刚发完评论,发送我看错代码了,我尝试了一下,发现数组是不支持泛型的,所以也没有找到解决问题的办法,如果你需要泛型的话 ,我觉得考虑考虑使用集合类把。
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片