黑马程序员技术交流社区

标题: 集合中的泛型? [打印本页]

作者: 汪伟楠    时间: 2014-1-16 12:29
标题: 集合中的泛型?
本帖最后由 汪伟楠 于 2014-1-16 18:01 编辑

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

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


作者: 程玉习    时间: 2014-1-16 12:39
一个泛型在声明时允许你传递特定的类型变量:<E>.除此之外,如果E是个类,你可以传递子类;如果E是个接口,你可以传递实现接口的类;你的例子可以通过反射添加,因为编译时会有去类型化。
作者: 大大老伴要跪IT    时间: 2014-1-16 12:41
不可以的,你可以和数组对比下。我们有int[],String[]等类型数组,代表只能存储相同的元素类型。
List<String> list = new List<String>();这个加了泛型之后只能存储String类型的数据了。好处是把运行时的的问题(ClassCastException)提前到了编译期。还能解决类型转换问题。
不过后来我们可以通过反射来存储其他类型的数据。
作者: 贺奕凯    时间: 2014-1-16 12:50
反射啦,话说入学考试才考了这题= =
作者: wodenhaowzg    时间: 2014-1-16 13:14
不可以,泛型就是用来规范传入的参数类型的。拿视频里面毕老师的比方,你的集合本来用泛型规定是存猪的,你要是存其他动物,比如狗,那猪不就疯了。
作者: 黄晓鑫    时间: 2014-1-16 14:36
不可以 只能传递本类类型或者本类的子类型
作者: 放课后小朋友    时间: 2014-1-16 15:10
因为List集合是可以添加索引的一个集合,可以有重复的元素,所以是有序的,泛型类一旦定义了参数使用某种类型,就不可更改,为了使程序更具灵活性,可以使用泛型方法,将泛型的类型定义成<?>,这样在调用方法的时候就可以传入任意类型的参数了。
作者: 工善器    时间: 2014-1-16 17:43
不可以,只有通过反射才能实现




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2