- ? extends T关键字代表的是上限,表示泛型参数为T以及T的子类,就可以直接get获取T类型的数据(因为子类可以转换为父类,统一返回父类), 同时这里不能添加,因为添加的话集合不能判断该参数实际类型是什么(比如A,B两个类,A是B的父类,List<? extends A> list = new ArrayList<>();如果我们get的话可以获取到A或者B,并且B由于是A的子类,可以转换为A,所有get出来就是A,但是如果添加元素,我们不能确定这个集合是A集合还是B集合)
- ? super T 关键字代表下限,表示泛型参数最低为T以及T的父类,如果get出来就是最终父类Object,因为只确定了下限,上限不确定,就将子类通过最终父类返回回来。如果添加元素的话就只可以添加T的子类,因为只有T的子类才能确保下限最终为T(所有T的子类能转换为T),如果是T的父类,下限又会上升。(比如A,B两个类,A是B的父类,List<? super B> list = new ArrayList<>();如果我们get的话可以获取到A,B以及其父类,A,B以及其父类都能转换为Object,所以返回Object,如果添加的话我们能确定我们的下限是B,只有添加的元素都能转换为B,才能添加进去,即B的子类)
super和extends的感想
最新推荐文章于 2024-07-08 17:49:05 发布