• 泛型学习笔记


    泛型

    泛型,即”参数化类型“,把类型当作参数一样传递。这种参数类型可以用在类、接口、和方法中,分别被称为泛型类、泛型接口、泛型方法。我们一般常用的泛型类型变量:T、E、K、V

    泛型类定义:

    public class MyClass{
       private T data;
       public MyClass(){
    
       }
       public MyClass(T data){
         this();
         this.data=data;
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    泛型接口定义:

    public interface MyInterface{
       public T next();
    }
    
    public class ImplMyInterface  implements MyInterface{
    
       @Override
       public String next(){
       return "OK";
       }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    泛型方法定义:

    public class MyClass{
       private T data;
       public MyClass(){
    
       }
       public MyClass(T data){
         this();
         this.data=data;
       }
       
       //下边的为普通方法
       public T getData(){
         retrun data
       }
       
       //下边的为泛型方法
       public  T method(T element){
         return element
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    限定类型变量
    extends 用于限定我们泛型类型的类型范围

    泛型中使用extends,是规定我们的泛型类型的类型范围,如果试图传入一个不相符的类型,将会发生编译错误

    public static  T min(T a,T b){
    if(a.compareTo(b)>0)return b; else return a;
    }
    
    public static  T max(T a,T b){
    if(a.compareTo(b)>0)return a; else return b;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • extends 左右都允许有多个,如T,V extends Comparable & Serializable

    • 泛型的extends用于继承和实现,多实现可以用&拼接,如果实现的是具体的类,如List,需要放在第一的位置,只允许实现一个具体的类

    • 泛型中是不允许使用instanceof 进行判断的

    通配符

    常用的通配符有? extends、? super、?


    • 通配符 ? extends A 代表上界,最多只能继承到A

    • 通配符 ? super A 代表下界,只允许继承A的超类,下限只能继承到A,A的子类不允许继承了

    • 通配符 ? super A 使用Set方法时,只允许set本身以及子类,不允许set超类

    • 通配符 ?

    虚拟机识别泛型
    • 虚拟机是怎么识别泛型的,Java中是类型擦除,即伪泛型。C#是真正的泛型类型
  • 相关阅读:
    NoSQL之 Redis配置
    前端搭建自己的cli脚手架, 实现前端工程化
    如何处理ChatGPT在文本生成中的语法错误和不合理性?
    vue3 el-form中嵌套el-tabale 对输入动态校验
    vscode优化使用体验篇(设置 | 插件)
    如何做一个基于JAVA的新闻管理系统毕业设计毕设作品(springboot框架)
    433-C++基础语法(51-60)
    uniapp主题切换功能的第二种实现方式(scss变量+require)
    一致性 hash 环
    恐造成下一个“千年虫”的闰秒,遭科技巨头们联合抵制
  • 原文地址:https://blog.csdn.net/qq_31309689/article/details/126279086