• 数据结构 - 泛型


    目录

    前言

    1. 什么是泛型?

    2. 为什么需要泛型?

    引入泛型之前

    引入泛型之后

    3.泛型类

    4.泛型的界限

    1.上下界

    2.通配符


    前言

    今天给大家介绍一下泛型的使用


    1. 什么是泛型?

    一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的 代码,这种刻板的限制对代码的束缚就会很大。

                                                                                          ----- 来源《Java编程思想》对泛型的介绍。

    泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

    2. 为什么需要泛型?

    引入泛型之前

    我们不妨先来看一个例子

    目前来看一切正常,你可能还会说: 这不是挺好的吗?

    我只能说: 别急

    多态的弊端是无法访问子类的特有功能

    现在你感觉如何?

    虽然在这种情况下,当前集合任何数据都可以存放,但是,更多情况下,我们还是希望他只能够持有一种数据类型。而不是同时持有这么多类型。所以,泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。

    引入泛型之后

    可以看到,编译直接报错.需要被提供的类型和真实提供的类型不匹配!
    泛型是在jdk5引入的,在jdk7时为了简化开发,java7增加了一个语言特性,称为菱形运算符<>

    ArrayList list = new ArrayList<>();

    3.泛型类

    应用场景: 当一个类中,某个变量的类型不确定时,就可以定义带有泛型的类

    上面的例子中的ArrayList就是通过泛型来实现的

    此处的E可以理解为变量,用来记录数据的类型(字母可以随意定义,常用为E,T,V,K,

    E 表示 Element K 表示 Key V 表示 Value N 表示 Number T 表示 Type)

    除了泛型类之外,还有泛型方法和泛型接口,和泛型类没什么本质区别,大家自行了解即可。

    4.泛型的界限

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

    1.上下界

    在Java的泛型中,可以使用上界(Upper Bounds)和下界(Lower Bounds)来限制泛型类型的范围。

    上界使用extends关键字来定义,表示泛型类型必须是指定类或其子类。例如,T extends Number表示T必须是Number类或其子类。在使用上界时,可以使用多个上界,使用逗号分隔。例如,T extends Number & Comparable表示T必须是Number类及其子类,并且实现了Comparable接口。

    下界使用super关键字来定义,表示泛型类型必须是指定类或其父类。例如,T super Integer表示T必须是Integer类或其父类。

    使用上界和下界可以提供更加灵活的泛型类型限制,使得泛型类型可以满足特定的要求。例如,使用上界可以确保泛型类型具有某些特定的方法或属性,而使用下界可以确保泛型类型可以接受某些类型的参数。

    2.通配符

    通配符(Wildcard)是Java泛型中的一种特殊符号,用于表示未知类型。

    通配符有两种形式:?? extends T

    ?表示任意类型,可以用来表示不确定的类型。

    ? extends T表示类型的上界,表示泛型类型必须是T类型或其子类。

    通配符可以用于方法的参数类型、返回类型、变量类型等位置,通过使用通配符,可以使泛型更加灵活和通用。

  • 相关阅读:
    C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)
    springMvc55-自定义异常
    DETR精读笔记
    【vue2第十八章】VueRouter 路由嵌套 与 keep-alive缓存组件(activated,deactivated)
    JS获取当前节点的兄弟/父/子节点
    【Python】组合数据类型
    Android Studio 汉化
    Java编写xml文件时,文件中特殊字符如何解决?
    Docker搭建官方私有仓库registry及相关配置
    C++笔记 16 (STL常用容器 - deque)
  • 原文地址:https://blog.csdn.net/weixin_73869209/article/details/133325922