疯狂JAVA讲义(第九章)学习笔记

一:简单零碎的知识汇总


1)静态方法,静态初始化块或者静态变量的声明和初始化中不允许使用泛型。


2)

疯狂JAVA讲义(第九章)学习笔记


3)

疯狂JAVA讲义(第九章)学习笔记


4)指定了通配符上限的集合,只能从集合中取元素(取出的元素总是上限的类型),不能向集合中添加元素(因为编译器没法确认集合元素实际是哪种子类型)。详见书P354页


5) 对于更广泛的泛型类来说,指定通配符上限就是为了支持类型型变,比如Foo是Bar的子类,这样A<Foo>就相当于

A<? extends Bar>的子类,可以将A<Foo>赋值给A<? extends Bar>类型的变量,这种型变方式称为协变。 

没有指定通配符上限的泛型类,相当于通配符上限是Object。


6) 指定通配符的下限就是为了支持类型型变。比如Foo是Bar的子类,当程序需要一个A<? super Foo>变量时,程序可以将A<Bar>,A<Object>赋值给A<? super Foo>类型的变量,这种型变方式被称为逆变。


7)Java中不允许创建一个泛型数组。

二:易混淆出错的难点汇总

1)如果程序显式指定了泛型构造器中声明的泛型形参的实际类型,则不可以使用菱形语法(即用一对尖括号表示泛型),如下疯狂JAVA讲义(第九章)学习笔记