一、声明中具备一个或多个类型参数的类或接口叫作泛型类、泛型接口(统称泛型)java
二、每种泛型都带一个原声态类型安全
- 即不带任何实际类型参数的泛型名称
- List 的原声态类型是 List
- 以下就是一个原生集合

- 未做限制,集合里面什么都能更加
- 编译期不会报错,运行下述代码才会报错
- 后续提取使用,类型转换会有问题



三、不提供类型参数,使用集合类型和其余泛型也仍然合法code
- 这样会失掉安全性和表述性全部优点
- java 容许这样作是为了和以前代码保持兼容性!
四、List对象
- List 和List
五、泛型子类型化规则blog
- List 是List 的子类型,和List
- List 会失去安全性,List
- 以下,能够进行编译,编译时会有一条警告(请不要忽视)


六、无限制通配符类型接口
- Set的无限制通配符类型为:Set(某个类型的集合)
- 无限定通配符在建立对象,建立泛型类、接口、方法都不能使用
- 常常和限定通配符extends,super一块儿使用
List<?> list2 = new ArrayList<String>();
// 只能增长null ,不能插别的任何元素
list2.add(null);
test(list2);
七、本条的两个例外:编译器
类文字中必须使用原生态类型编译
- 好比 List.class 、String[].class、int.class
- 不可使用:List<String.class>、List<?>.class
- 因为泛型在运行时会被擦除
参数化类型而非无限制通配符上使用instanceOf 都是非法的class
- 无限制通配符上可使用instanceOf ,效果和原生态类型同样的

八、总结test
- 不要在新代码中使用原生态类型
- 原生态代码仅仅是为了与引入泛型以前代码兼容和互用提供的
- Set<Object>是参数化类型,包含任何对象的一个集合(安全)
- Set<?>通配符类型,只包含某种未知对象的集合(安全)
- Set 原生态类型,脱离了泛型(不安全)
