A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔建国 中级黑马   /  2012-5-11 21:39  /  2037 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

可以创建一个泛型数组引用,如List<String>[] ls; 编译时不会报错,
但List<String>[] ls=new List<String>[9];  就会报错。

2 个回复

倒序浏览
java中是不支持建立参数化类型数组的。
虽然在逻辑上来看应该是可以建立的。但是,我们得注意一件事:java的泛型和C++的泛型不一样,就像张老师在视频里说的,java的泛型是伪泛型,java的泛型只存在于编译时期!
然后我们在说说数组,数组和集合很相似,但是数组是建立以后就不可以改变的,数组中允许存入同一种类型的对象。虚拟机在将对象存入数组的时候会进行运行是检查,以确保存入的对象和运行时的类型相兼容。
String[] str = new String[10];
Object[] objs = str;//不会报错。数组的一个属性;不明白去网上查查;
objs[0]=12;//AUTOBOXING;
Sring s = str[0];//运行时期报错。类型转换异常

如果在泛型中使用数组,这样的检查就显得不那么足够了,因为泛型只在编译时期有效,在运行时期java虚拟机读取不到原来的泛型信息,就因为这个原因就造成了一个类型安全的问题,所以java设计人员避免用户创建参数化的数组。
如果我们假设泛型化的数组可以创建:
ArrayList<String>[] al = new ArrayList<String>[12];
ArrayList<Integer> in  = new ArrayList<Integer>();
in.add(12);
Object[] objs = al;//数组特性;
objs[0]= in;//不会报错哦
String ss = al[0].get(0);//类型转换异常。
这就是一个严重的类型安全问题,如果我们没有取出元素,而仅仅是存入,那么我们定义存入的是String但是却实际出入Integer;
回复 使用道具 举报
本帖最后由 小小企鹅 于 2012-10-27 22:37 编辑

List是一个集合,长度不固定。
List<String> ls = new List<String>()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马