关于逆变和协变的一些理解
Person 是个中间的类,上面有父类 Bean,下面有子类 Student。
当用 extends 定义了上界时,就不是再传入 Person 的父类了,只能传入自身或子类,而且只能是只读形式,不能添加。这是因为父类 Bean 中可能没有 Person 中定义的方法,如果可以传入并调用的话,会出错。只读是因为如何可以添加的话,那么在传递的过程中,就可以把原先传入的子类改为其它子类,那么类型就会错乱,比如原先的子类A中只有 read 方法,在方法中替换成其它只有 write 方法的子类B,当列表返回再调用 read 方法时就会导致代码出错,所以系统才会把定了上界的类型设置为只读。
当用 super 定义了下界时,就不是再传入 Person 的子类了,只能传入自身或父类,而且可以添加。这是为了添加需要,如果可以传入子类的话,比如子类A的列表,这时再往里面加入子类B的话,就会出错,但如果是父类的话,就没有问题。
- 要从泛型类取数据时,用extends;
- 要往泛型类写数据时,用super;
- 既要取又要写,就不用通配符(即extends与super都不用)。