前面也还在困惑为什么 super 的时候,相应的容器对象不能 get (拿一个对象出来),extends 的时候,相应的容器对象不能 set (放入一个对象),实际上是为了解决类型安全问题。
    super 只存在下界,所有 get (拿取容器对象)时,不知道容器内的对象具体是哪个 type,所以不支持。也许会产生疑问,那么为啥不直接使用 Object 超类来接收这个变量呢?其实,我也不知道为什么,这是这么想,既然都是用了 Object ,那为什么不直接使用 ? 或者 T 通配符,反而选择有界的呢?而 set (放置容器对象),知道上界。
    extends 存在上界,所以 set (放置容器对象)时,不知道容器内将装入什么样 type 的独象,所以不支持。

    上下界通配符的存在,应该是为了方便传参,限定参数范围,减少相关的逻辑判断(简单说,就是简化代码,使用 extends 直接使用参数本身相关公共方法;使用 super ,就是为了限定参数不能是其它界限外的类型,好像就没有额外的作用了)。

    还是不理解的话,就从参数的声明来讲,子类对象可以使用父类来接收声明。super (下界)只知道父类(当前的参数),如何找一个确切type来接收呢?extends (上界)不知道具体的对象(参数本身),只知道参数本身的父类(上界),故而可以get (从容器中拿取);只有这样,才保证了安全。

    泛型,只是允许使用时界定范围,在具体的使用中,是知道具体的参数类型,我们可以使用确切的 type 进行相关的操作。