对象数组的强型转换问题

caiming250 2007-11-22 03:53:10
ArrayList al = new ArrayList();
......//al 数据写入
String[] strs = (String[]) al.toArray();
这个是错的 为什么?


为什么 在集合里面 又有这种写法是对的呢?
E[] strs = (E[]) new Object[];
...全文
223 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaopiao11 2007-11-26
  • 打赏
  • 举报
回复
调用al.toArray()返回的是一个Object型的数组。
如:al.add("dd");
al.add(new Object());
Object[] o= al.toArray();
这样是可以的。你将Object[] 强制转String[]当然错误。
al.add("dd");
al.toArray(new String[0]);
这样当然可以,你指定了这个list转为String[]型。
beiouwolf 2007-11-26
  • 打赏
  • 举报
回复
泛型和类不一样,虽然看上去象一个类名
实际上,泛型动作类似于预编译器
所以不要去拿泛型和类来比较,他们完全不同
caiming250 2007-11-24
  • 打赏
  • 举报
回复
谢谢楼上的几位

我开始的 理解是 数组就是不能强型转换 因为 数组对象没有继承关系 也就是Object[] 和 String[] 没有父子关系 所以不能强型转换。

可是当我看到E[] strs=(E[])new Object[]; 的时候又模糊了。

如果说泛型语法不一样的话,那我声明的泛型类被类型擦除了之后 就有这种语句:String[] strs=(String[])new Object[];


aniude 2007-11-24
  • 打赏
  • 举报
回复
1. Object[] toArray();
2. T[] toArray(T[] a);
你查源码可以知道, 2是泛型的,1是返回的是Object[]。
廖骥荣 2007-11-23
  • 打赏
  • 举报
回复
学习了!!
zhanggc1001 2007-11-23
  • 打赏
  • 举报
回复
我也问过,还不知道原因;
只知道源码里的toArray返回的是Object类型,按道理是可以转的
但是不知为什么就是转不了
但是这样也可以转
Object objs[]=al.toArray();
for(Object obj:objs)
System.out.println((String)obj);
beiouwolf 2007-11-23
  • 打赏
  • 举报
回复
String[] strs = (String[]) al.toArray();
当然是错的,没有声明数组大小

E[] strs = (E[]) new Object[];
这个是泛型模板....写法也标准语法不同...
caiming250 2007-11-22
  • 打赏
  • 举报
回复
楼上的 谢谢了哈 我是问为什么 不是怎么做
zhanggc1001 2007-11-22
  • 打赏
  • 举报
回复
你 可以这样
ArrayList<String> al=new ArrayList<String>();
String []strs=new String[al.size()];
al.toArray(strs);
这样就可以转了
网络咖啡 2007-11-22
  • 打赏
  • 举报
回复
数组的类型不能强制转换的,只能强转数组中每个元素的类型

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧