开发者社区> 问答> 正文

关于泛型问题?报错

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进去

展开
收起
爱吃鱼的程序员 2020-06-08 15:40:20 443 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    只要通过编译,在生成的字节码中就不包括泛型的类型信息。

    Listlist=newArrayList();这个List没有类型信息,是可以作为setList的参数的。

    所谓的泛型,只是在编译的时候有作用,运行时候是没有泛型信息的,被编译器去掉了,例如:

    List<String>a= new ArrayList<String>();

    ArrayList b = new ArrayList();

    a.getClass()和b.getClass()是一模一样的,没区别。

    泛型一般作为给编译器确定类型使用,消除了强制转换之类的操作

    2020-06-08 15:40:36
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载