泛型的学习

文章目录

泛型

泛型的概念

  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:使用时指定的类型不能小于操作的类,即>=
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习