看ArrayList的toArray(T[] a)的源码时候遇到一些问题

白砂糖番茄乐园 2020-05-04 03:40:29
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}


(T[]) Arrays.copyOf(elementData, size, a.getClass());
这上面是Object数组为什么可以用(T[])强转,不是说数组不能这样强转转吗
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灯塔 2020-05-05
  • 打赏
  • 举报
回复
引用 4 楼 白砂糖番茄乐园 的回复:
[quote=引用 2 楼 paullbm 的回复:]T[]只是用了个泛型,如果进入时和返回时的类型是一样的,为什么不能强转? 你可以把正常的强转理解成变魔术,进来时先画了个装,出去时把脸洗干净了,脸是可以变的,但人还是那个人! 如果你要把一个大人换一个小孩子出去,导演可不会允许的,也是不现实的!
懂了,懂了,谢谢[/quote] 借楼主宝地学习了
  • 打赏
  • 举报
回复
引用 2 楼 paullbm 的回复:
T[]只是用了个泛型,如果进入时和返回时的类型是一样的,为什么不能强转? 你可以把正常的强转理解成变魔术,进来时先画了个装,出去时把脸洗干净了,脸是可以变的,但人还是那个人! 如果你要把一个大人换一个小孩子出去,导演可不会允许的,也是不现实的!
懂了,懂了,谢谢
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
哪里说过不能强转了? 比如 Object []obj = new Integer[10]; //obj表面是Object[] System.out.println(obj.getClass());//实际是Integer[] Integer []t = (Integer[])obj; //这样强行转换就没问题
好的,明白了!谢谢解答
paullbm 2020-05-04
  • 打赏
  • 举报
回复
T[]只是用了个泛型,如果进入时和返回时的类型是一样的,为什么不能强转? 你可以把正常的强转理解成变魔术,进来时先画了个装,出去时把脸洗干净了,脸是可以变的,但人还是那个人! 如果你要把一个大人换一个小孩子出去,导演可不会允许的,也是不现实的!
qybao 2020-05-04
  • 打赏
  • 举报
回复
哪里说过不能强转了? 比如 Object []obj = new Integer[10]; //obj表面是Object[] System.out.println(obj.getClass());//实际是Integer[] Integer []t = (Integer[])obj; //这样强行转换就没问题

62,614

社区成员

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

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