对比通配符上限语法定义,看下面的通配符下限语法



我们先看一个TreeSet类

接下来我们用下限的构造函数做一个案例



创建好后,我们看下TreeSet在JDK里面的使用
实现3个外部比较器:



结果是按照年龄排序的

给TreeSet指定比较器1

给TreeSet指定比较器3,就不对了,根本原因是通配符下限的使用

总结,这个TreeSet的设计其实也是很巧妙合理的,

因为我们去构建子类对象时,必然先构建父类对象,这个时候呢,父类成员就已经被初始化了,所以我们根据父类成员Animal去比较的话是能够成立的;
相反创建子类对象(Cat)时并不能创建孙类对象(MiniCat),所以如果我们传递孙类对象比较器的话,
孙类成员并没有初始化,如果使用比较器3的话会产生空引用的。