尽量不要使用原生态类型
首先,我们要知道什么是原生态类型。每一个泛型都定义一个原生态类型,比如List
1 | public void add(List list,String string){ |
如果调用方法时是new Person().add(new ArrayList<Person>(),"ddd");
这样,那么程序在运行时会报类型错误。
而代替的方法主要有几个:使用无限制通配符类型List<?>
,这样你可以传入任何非null元素。当然这样无法根本消除问题。
其次是使用泛型方法或者有限制的通配符类型List<? extends String>
列表优先于数组
数组和泛型的区别:数组是协变的,泛型是不可变的。什么意思呢?Type1是Type2的父类,则Type1[]同样是Type2[]的父类,而List
比如:
1 | Object[]os=new Long[1]; |
这个代码在编译时不会报错,但在运行时会报错,而类似的代码在使用泛型时会在编译时就报错。
泛型和数组不能混用,即禁止创建泛型数组。