ArrayList源码阅读c.toArray might (incorrectly) not return Object[] (see 6260652)
来源:互联网 发布:北理工网络教育 编辑:程序博客网 时间:2024/05/20 14:25
今天阅读ArrayList源码,发现如下构造函数:
public ArrayList(Collection<? extends E> c) { elementData = c.toArray(); if ((size = elementData.length) != 0) { // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); } else { // replace with empty array. this.elementData = EMPTY_ELEMENTDATA; } }
发现其中一行注释很奇怪
// c.toArray might (incorrectly) not return Object[] (see 6260652)
百度一番发现这是个类型问题。因为不同的类通过toArray方法返回的不一定是Object类型(如下),这样会导致在调用ArrayList增加Object元素的方法的时候出现错误。
public static void Main() {List<String> list = Arrays.asList("abc");System.out.println(list.getClass());Object[] objArray = list.toArray();System.out.println(objArray.getClass());objArray[0] = new Object(); }结果:
// java.util.Arrays$ArrayList
// java.lang.String;
// cause ArrayStoreException
要避免这种情况,编写者便判断了下:elementData.getClass() != Object[].class,不通过的话调用Arrays.copyOf方法来实现把类型变为Object。
阅读全文
0 0
- ArrayList源码阅读c.toArray might (incorrectly) not return Object[] (see 6260652)
- ArrayList源码中c.toArray might (incorrectly) not return Object[] (see 6260652)
- JDK源码一句注释:c.toArray might (incorrectly) not return Object[] (see 6260652)
- JDK源码一句注释:c.toArray might (incorrectly) not return Object[] (see 6260652)
- JDK1.6集合框架bug:c.toArray might (incorrectly) not return Object[] (see 6260652)
- JDK1.6聚合框架bug:c.toArray might (incorrectly) not return Object[] (see 6260652)
- Java笔记---c.toArray might (incorrectly) not return Object[] (see 6260652)官方Bug
- JDK1.6集合框架bug:c.toArray might (incorrectly) not return Object[] (see 6260652)
- ArrayList的toArray()与toArray(Object[] a)
- ArrayList.toArray()
- ArrayList.ToArray()
- ArrayList源码阅读笔记
- ArrayList源码阅读
- ArrayList源码阅读
- java8 ArrayList源码阅读
- 源码阅读之ArrayList
- ArrayList源码阅读
- ArrayList源码阅读笔记
- 实现bootstrap的dropdown-menu(下拉菜单)点击后不关闭的方法
- nyoj-91-阶乘之和
- 网站SEO优化为什么要设置面包屑导航
- * response * request * 编码 * 路径等小结
- EventBus的简单使用,消息传递
- ArrayList源码阅读c.toArray might (incorrectly) not return Object[] (see 6260652)
- solr源码导入eclipse进行编译之出现的问题
- 网络图片浏览
- uva 147 拆钱(完全背包)
- 【排序之三】归并排序
- OpenWRT下使用UVC摄像头
- Session机制详解
- list下的简易扑克牌游戏
- 打洞机制