泛型的学习

文章目录

泛型

泛型的概念

  1. 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时
  2. 从JDK1.5以后,Java引入了"参数化类型(Parameterized type)"的概念,允许我们在创建集合时再指定集合元素的类型,正如:List,这表明该List只能保存字符串类型的对象。
  3. JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参

在集合中使用泛型

  1. 集合接口或集合类在jdk5.0时都修改为带泛型的结构
  2. 在实例化集合类时,可以指明具体的泛型
  3. 指明完以后,在集合类或接口中凡是定义类或接口时,内部结构使用到类的泛型的位置,都指定为实例化的泛型类型 比如:add(E e) --->实例化后 add(Integer e)
  4. 注意点:泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,呐包装类替换
  5. 如果实例化时,没有指明泛型的类型.默认为java.lang.Object类型

自定义泛型结构

  • 关于自定义泛型类,泛型接口
  1. 如果实例化时,没有指明泛型的类型.默认为java.lang.Object类型
  2. 要求:如果大家定义类类是带泛型的,建议在实例化时要指明类的泛型
  3. 建议:实例化时指明类的泛型
  4. 由于子类在继承带泛型的父类时,指明了泛型的类型,则实例化子类对象时,不再需要指明泛型
java 复制代码
 @Test
    public void Test1(){
        
        Order order=new Order();
        order.setOrderT(123);
        order.setOrderT("ABC");

        
        Order<String> order1=new Order<String>("orderAA",1001,"ORDER" );
        order1.setOrderT("orderBB");
    }

泛型在继承上的体现

  • 如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口,G并不是G的子类型
java 复制代码
public void testGenericAndSubClass() {
Person[] persons = null;
Man[] mans = null;
// 而 Person[] 是 Man[] 的父类.
persons = mans;
Person p = mans[0];
// 在泛型的集合上
List<Person> personList = null;
List<Man> manList = null;
// personList = manList;(报错)
}

通配符的使用

复制代码
1. 使用类型通配符:?
  1. 写入list中的元素时,不行。因为我们不知道c的元素类型,我们不能向其中
    添加对象。唯一的例外是null,它是所有类型的成员。
  2. 有限制条件的通配符的使用
    • ? extends A:
      G<? extends A>可以作为G和G的父类的,其中B是A的子类
    • ? super A:
      G<? super A>可以作为G和G的父类的,其中B是A的父类
  3. 通配符指定上限
    上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<=
  4. 通配符指定下限
    下限super:使用时指定的类型不能小于操作的类,即>=
相关推荐
于顾而言1 小时前
【笔记】Comprehensive Rust语言学习
笔记·学习·rust
im_AMBER2 小时前
React 06
前端·javascript·笔记·学习·react.js·前端框架
zyq99101_13 小时前
树与二叉树的奥秘全解析
c语言·数据结构·学习·1024程序员节
微露清风3 小时前
系统性学习C++-第七讲-string类
java·c++·学习
报错小能手3 小时前
项目——基于C/S架构的预约系统平台(3)
linux·开发语言·笔记·学习·架构·1024程序员节
W.Y.B.G4 小时前
css3 学习笔记
笔记·学习·css3·1024程序员节
执笔论英雄4 小时前
【大模型推理】ScheduleBatch 学习
java·spring boot·学习
AL流云。5 小时前
学习Docker前提:多环境安装Docker
学习·docker·eureka·1024程序员节
2301_803554526 小时前
Http学习
网络协议·学习·http
风已经起了6 小时前
FPGA学习笔记——用Vitis IDE生成工程(串口发送)
笔记·学习·fpga开发·fpga·1024程序员节