Effective java读书笔记(3)

Posted by alonealice on 2016-11-07

尽量不要使用原生态类型

首先,我们要知道什么是原生态类型。每一个泛型都定义一个原生态类型,比如List它的原生态类型就是List。那为什么又尽量不要使用呢?因为使用它可能会照成类型不安全。比如:

1
2
3
public void add(List list,String string){
list.add(string);
}

如果调用方法时是new Person().add(new ArrayList<Person>(),"ddd");这样,那么程序在运行时会报类型错误。
而代替的方法主要有几个:使用无限制通配符类型List<?>,这样你可以传入任何非null元素。当然这样无法根本消除问题。
其次是使用泛型方法或者有限制的通配符类型List<? extends String>

列表优先于数组

数组和泛型的区别:数组是协变的,泛型是不可变的。什么意思呢?Type1是Type2的父类,则Type1[]同样是Type2[]的父类,而List和List则没有关系,这样就可以数组在使用时的错误类型转换。
比如:

1
2
Object[]os=new Long[1];
os[0]="dd";

这个代码在编译时不会报错,但在运行时会报错,而类似的代码在使用泛型时会在编译时就报错。
泛型和数组不能混用,即禁止创建泛型数组。