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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪伟楠 中级黑马   /  2014-1-16 12:29  /  1639 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汪伟楠 于 2014-1-16 18:01 编辑

加了泛型的List集合还能存指定泛型类型以外的类型吗?具体给我讲一讲谢谢了。

int x = 3;
List<String> list = new List<String>();
list.add("xxx");
list.add(x);

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
一个泛型在声明时允许你传递特定的类型变量:<E>.除此之外,如果E是个类,你可以传递子类;如果E是个接口,你可以传递实现接口的类;你的例子可以通过反射添加,因为编译时会有去类型化。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
不可以的,你可以和数组对比下。我们有int[],String[]等类型数组,代表只能存储相同的元素类型。
List<String> list = new List<String>();这个加了泛型之后只能存储String类型的数据了。好处是把运行时的的问题(ClassCastException)提前到了编译期。还能解决类型转换问题。
不过后来我们可以通过反射来存储其他类型的数据。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
反射啦,话说入学考试才考了这题= =
回复 使用道具 举报
不可以,泛型就是用来规范传入的参数类型的。拿视频里面毕老师的比方,你的集合本来用泛型规定是存猪的,你要是存其他动物,比如狗,那猪不就疯了。
回复 使用道具 举报
不可以 只能传递本类类型或者本类的子类型
回复 使用道具 举报
因为List集合是可以添加索引的一个集合,可以有重复的元素,所以是有序的,泛型类一旦定义了参数使用某种类型,就不可更改,为了使程序更具灵活性,可以使用泛型方法,将泛型的类型定义成<?>,这样在调用方法的时候就可以传入任意类型的参数了。
回复 使用道具 举报
不可以,只有通过反射才能实现
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马