Daizc
count.articles52
count.tags25
count.categories3
泛型上下界

泛型上下界

java的泛型基于类型擦除机制

super 类型下界通配符

  • List中只能存储一种元素,此处声明的<!--? super BaseDemoEntity-->,表明这个List中存放的元素属于 BaseDemoEntity 其中一种 父类类型

  • BaseDemoEntity的父类可能有复数个,比如 Object,BaseEntity。取出时不知道到底List里到底装的啥,但一定是继承于Object,所以统一强转为Object类型

  • 存入时只能放入 BaseDemoEntity 和它的子类,因为声明的<!--? super BaseDemoEntity-->,BaseDemoEntity 可以被安全的强转为<!--? super BaseDemoEntity-->此处如果传入BaseDemoEntity的父类,那么运行时jvm将传入的类型转为<!--? super BaseDemoEntity-->时可能会因为类型不一致报错

1
2
3
4
5
6
7
8
9
@RequestMapping("/superBaseDemoEntity")
public void superBaseDemoEntity() {

List<!--? super BaseDemoEntity--> appList = new ArrayList&lt;&gt;();
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-->类型是一个类型,因此不能存入

1
2
3
4
5
6
7
 @RequestMapping("/extendsBaseDemoEntity")
public void extendsBaseDemoEntity() {

List<!--? extends BaseDemoEntity--> appList2 = new ArrayList&lt;&gt;();
BaseDemoEntity baseDemoEntity = appList2.get(0);
}

copyright.author:Daizc
copyright.permalink:https://note.bequick.run/%E6%B3%9B%E5%9E%8B%E4%B8%8A%E4%B8%8B%E7%95%8C/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可