泛型
Tip-23 请不要在新代码中使用原生态类型
-
java1.5 版本后 就不要使用 List 而是 使用 List<String> 这种 带泛型的集合
-
如果使用原来的集合类型,就失掉了泛型在安全性和表述型方面的所有优势
-
原生的List 和 List<Object> 是不同的 List<Object> 并没有丢掉安全性
-
假如不确定或不关心实际的类型参数,就可以使用一个问号代理 此乃 无限制通配符类型List<?>
-
加入比对两个集合中的共同元素的数量-使用无限制通配符
static int numElementsInCommon(Set<?> s1,Set<?> s2){
int result = 0 ;
for(Object 01 : s1){
if(s2.contains(o1)){
result++;
}
}
return result;
}
- 不要在新代码中使用原生态类型,这条规则有两个小小的例外,两者都源于“泛型信息可以在运行时被擦除”这一事实。
- 在类文字中必须使用原生态类型。换句话说 List.class String[].class 和 int.class 都合法,但是List<String>.class 和 List<?>.class 则不合法
- 由于泛型信息可以在运行时删除,因此在参数化类型而非无限制通配符上使用instanceof操作符是非法的。
- 用无限制通配符类型代替原生态类型,对instanceof 操作符的行为不会产生影响。
Tip-24 消除非受检警告
- 用泛型编程时,会遇到许多编译警告:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,以及非受检转换警告
- 要尽可能消除一切非受检警告,如果消除了所有警告,就可以确保代码是类型安全的
Tip-25 列表优先于数组
- 数组于泛型相比,有两个重要的不同点。首先,数组是协变的,泛型是不可变的
- 第二大区别,数组是具体化的。
- 数组提供了运行时的类型安全,但是没有编译时的类型安全,
- 如果你发现自己将他们混合起来使用,并且得到了编译时错误或者警告,你的第一反应是用列表代替数组
Tip-26 优先考虑泛型
- 看不懂啊
Tip-27 优先考虑泛型方法
- 静态工具方法尤其适合于泛型化
- 泛型化带来类型安全
- 泛型方法就像泛型一样,使用起来比要求客户端转换输入参数并返回值得方法来得更加安全,也更加容易。
Tip-28 利用有限制通配符来提升API的灵活性
- java提供了一种特殊的参数化类型,称作有限制的通配符类型<? Extends E>
- <? Extends E> 和 <? super E> 逆变和协变
- PECS 表示 Producer-extends Consumer-super
- 方法的参数是协变位置,返回值是逆变位置。
- 要从泛型类取数据时,用extends;
- 要往泛型类写数据时,用super;
- 既要取又要写,就不用通配符(即extends与super都不用)。
Tip-29 优先考虑类型安全的异构容器
- 看不懂
网友评论