java是基于类型擦除的伪泛型 没其他语言的泛型好用
super 类型下界通配符
List中只能存储一种元素,此处声明的
<!--? super BaseDemoEntity-->
,表明这个List中存放的元素属于 BaseDemoEntity 其中一种 父类类型BaseDemoEntity的父类可能有复数个,比如 Object,BaseEntity。取出时不知道到底List里到底装的啥,但一定是继承于Object,所以统一强转为Object类型
存入时只能放入 BaseDemoEntity 和它的子类,因为声明的
<!--? super BaseDemoEntity-->
,BaseDemoEntity 可以被安全的强转为<!--? super BaseDemoEntity-->
此处如果传入BaseDemoEntity的父类,那么运行时jvm将传入的类型转为<!--? super BaseDemoEntity-->
时可能会因为类型不一致报错
@RequestMapping("/superBaseDemoEntity")
public void superBaseDemoEntity() {
List<!--? super BaseDemoEntity--> appList = new ArrayList<>();
appList.add(new Music());
appList.add(new BaseDemoEntity());
Object object1 = appList.get(0);
}
extends 类型上界通配符
<!--? extends BaseDemoEntity-->
=> BaseDemoEntity的任意一种子类List中只能存储一种元素,此处声明的
<!--? extends BaseDemoEntity-->
表明这个List中存放的元素可能是继承与 BaseDemoEntity 的 其中一种 元素取出时可以被安全的强转为 BaseDemoEntity
存入时由于不知道你存入的类型是否跟
<!--? extends BaseDemoEntity-->
类型是一个类型,因此不能存入
@RequestMapping("/extendsBaseDemoEntity")
public void extendsBaseDemoEntity() {
List<!--? extends BaseDemoEntity--> appList2 = new ArrayList<>();
BaseDemoEntity baseDemoEntity = appList2.get(0);
}