public class Student {
private String name;
private String sex;
private TestEnum test;
private Date date;
private List<Clazz> list;
public List<Clazz> getList() {
return list;
}
public void setList(List<Clazz> list) {
this.list = list;
}
。。。。。。
}
student中定义了一个有Clazz类泛型的例子,CLazz具体就不贴出,但是在给student赋值
@Test
public void test005() throws Exception{
List list = new ArrayList();
Clazz clazz1 = new Clazz();
Clazz clazz2 = new Clazz();
clazz1.setId(1);
clazz1.setName("aaa");
clazz1.setId(2);
clazz1.setName("bbb");
list.add(clazz1);
list.add(clazz2);
list.add(new Date());
Student student1 = new Student();
student1.setList(list);
System.out.println(student1.getList());
}
结果为
[bean.Clazz@f9f91d, bean.Clazz@151f910, Tue Apr 11 09:47:05 CST 2017]
并没有报错是什么情况,为什么拥有date类型的list也能 set进去
只要通过编译,在生成的字节码中就不包括泛型的类型信息。
Listlist=newArrayList();这个List没有类型信息,是可以作为setList的参数的。
所谓的泛型,只是在编译的时候有作用,运行时候是没有泛型信息的,被编译器去掉了,例如:
List<String>a= new ArrayList<String>();
ArrayList b = new ArrayList();
a.getClass()和b.getClass()是一模一样的,没区别。
泛型一般作为给编译器确定类型使用,消除了强制转换之类的操作
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。