泛型
笔记:
genericity:
1、请不要在新代码中使用原生态类型
声明中具有一个或者多个类型参数的类或者接口就是泛型类或者接口。
每种泛型定义一组参数化的类型,构成格式为:显示类或者接口的名称,接着用尖括号把对应于泛型形式类型参数的实际类型参数列表括起来。
每个泛型都定义一个原生态类型,即不带任何实际类型参数的泛型名称
如果使用原生态类型,就是去了泛型在安全性和表达性方面的所有优势。
术语:
参数化的额类型 List<String>
实际类型参数 String
泛型 List<E>
形式类型参数 E
无限制通配符类型 List<?>
原生态类型 List
有限制类型参数 <E extends Number>
递归类型限制 <T extends Comparable<T>>
有限制通配符类型 List<? extends Number>
泛型方法 static <E> List<E> asList<E[] a>
类型令牌 String.class
2、消除非受检警告
要尽可能消除每一个非受检警告
如果无法消除警告,同时可以证明引起警告的代码是类型安全的,(只有在这种情况下才)可以用一个@SuppressWarning("unchecked")注解来禁止这条警告
每当使用SuppressWarnings("unchecked")注解时,都要添加一条注释,说明为什么这么做是安全的
3、列表优于数组
数组域泛型相比,两个重要的不同点:
数组是协变的,如果Sub是Supper的子类型,那么数组类型Sub[]就是Super[]的子类型。相反,泛型是不可变的。
数组是具体化的。因此数据再运行时才知道并检查它们的原色类型约束。相比之下,泛型是通过擦除来实现的。因此泛型只在编译时强化它们的类型关系并在运行时丢弃它们的元素类型信息。
因此,数组和泛型不能很好的混合使用。
需要的时候,用列表代替数组
4、优先考虑泛型
有限制的类型参数: <E extends Delayed>
5、优先考虑泛型方法
6、利用限制通配符来提升API的;灵活性
7、优先使用类型安全的异构容器

浙公网安备 33010602011771号