Effective Java

23.请不要在新代码中使用原生态类型

1.泛型(generic)类或接口:声明中具有一个或多个类型参数(type parameter)的类或接口。e.g. List<E>

2.每种泛型可以定义一组参数化的类型(parameterized type)。e.g. List<String>

3.每个泛型定义一个原生态类型。e.g. List

4.使用参数化类型来允许插入任意类型的对象。e.g. List<Object>

5.List<String>是List的子类型,而不是List<Object>的子类型。

6.在不确定或者不在乎集合中元素类型的情况下,可使用无限制的通配符类型。e.g. List<?>

7.通配符类型是安全的,原生态类型是不安全的。

例外:

1.在类文字中必须使用原生态类型。List.class,String[].class,int.class合法,List<String>.class,List<?>.class不合法

2.在参数化类型上使用instanceof操作符是非法的。

-------------------------------------------------------------------------------------------

24.消除非受检警告

1.当程序员能证明引起警告的代码是类型安全的场合下,可以使用@SuppressWarnings("unchecked")注解来禁止这条警告。

2.尽量在可能小的范围内使用SuppressWarnings注解,永远不要在类上使用,因为这很有可能掩盖重要的警告。

3.用注解将禁止该警告的原因记录下来

-------------------------------------------------------------------------------------------

25.列表优先于数组

1.数组是协变的(如果sub是super的子类型,那么数组类型sub[]就是super[]的子类型);

  泛型是不可变的。对于任意两个类型Type1和Type2,List<Type1>既不是List<Type2>的子类型也不是List<Type2>的超类型。

2.数组是具体化的;泛型是通过擦除来实现的。

  泛型只在编译时强化它的类型信息,在运行时丢弃(擦除)它的元素类型信息。

 

posted @ 2015-10-21 14:08  niaomingjian  阅读(149)  评论(0编辑  收藏  举报