• 关于泛型的知识


    一.什么是泛型

    1.泛型的基本定义

    泛型:就是适用于许多许多类型

    **泛型的主要目的:**就是指定当前的容器,要持有什么类型的对象,让编译器去检查,此时,就要把类型作为参数传递,需要什么类型,就传入什么类型。

    2.语法

    在这里插入图片描述
    定义泛型类,在类型名称后要在 <> 中说明参数列表,也可以定义多个参数

    在这里插入图片描述
    泛型类可以继承另一个类

    3.举例

    实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个
    下标的值?
    思路:

    1. 我们以前学过的数组,只能存放指定类型的元素,例如:int[] array = new int[10]; String[] strs = new
      String[10];
    2. 所有类的父类,默认为Object类。数组是否可以创建为Object?
    class MyArray<T>{
        //创建一个Object数组
        private Object[] objects=new Object[10];
        //设置一个存储数据的方法(T的作用就是存放指定类型的数据)
        public void setArray(int pos,T val){
            objects[pos]=val;
        }
        //设置一个获取数据的方法,(需要强转为指定类型的数据)
        public T getArray(int pos){
            return (T)objects[pos];
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            //传递的类型就是在我们编译的时候对数据类型进行检查
            //取数据不需要进行类型转换
            //<>中不能是简单类型,必须是包装类型或者引用类型
            MyArray<Integer> myArray=new MyArray<>();
            myArray.setArray(0,1);
            myArray.setArray(1,1);
            System.out.println(myArray.getArray(0));
            System.out.println("=====================");
            MyArray<String> myArray1=new MyArray<>();
            myArray1.setArray(0,"hello");
            String str=myArray1.getArray(0);
            System.out.println(str);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    我们可以看到,我们不仅可以传值,还可以传数据类型,不过传递的数据类型必须是包装类型或者是引用数据类型

    1. 类名后的 代表占位符,表示当前类是一个泛型类
    2. 不能new泛型类型的数组
    3. 类型后加入<指定包装类型>指定当前类型
    4. 不需要进行强制类型转换
    5. 规范】类型形参一般使用一个大写字母表示,常用的名称有:
      E 表示 Element
      K 表示 Key
      V 表示 Value
      N 表示 Number
      T 表示 Type
      S, U, V 等等 - 第二、第三、第四个类型

    二.泛型是如何编译的

    在编译的过程当中,将所有的T替换为Object这种机制,我们称为:擦除机制

    Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。

    三.泛型的上界

    1.什么是泛型的上界

    在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

    在这里插入图片描述

    在这里插入图片描述

    2.复杂示例

    在这里插入图片描述
    在这里插入图片描述

    因为Alg这个泛型类实现了Comparable接口,所以传入的数据类型也要实现这个接口,因为Integer实现了Comparable接口但是Person并没有实现这个接口所以不能将Person作为类型传递,如果想传递,必须要实现Comparable接口
    在这里插入图片描述
    如图Person实现了Comparable接口所以就不会报错。

    四.泛型方法

    在这里插入图片描述

  • 相关阅读:
    【android Framework 探究】android 13 aosp编译全记录
    技术管理进阶——扎心了!老板问我:你们技术部和外包团队有什么区别?
    SysTick—系统定时器
    SpringBoot War打包部署
    【算法】二分查找-20231120
    使用原生html<table>构造复杂table表
    TypeScript编译选项
    MyBatis学习笔记(2022-11-30)
    Java回顾-多线程
    聚苯乙烯-SiO2/NiFe2O4磁性微球/中空介孔载银二氧化硅聚苯乙烯微球制备过程
  • 原文地址:https://blog.csdn.net/weixin_74744611/article/details/133203206