zoukankan      html  css  js  c++  java
  • Java泛型

    Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
    泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

    eg:
    假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?
    答案是可以使用 Java 泛型。
    使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。


    泛型方法
    你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

    下面是定义泛型方法的规则:
    1、所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。
    2、每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
    3、类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
    4、泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)

    泛型类
    泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
    和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

    类型通配符
    在泛型操作中也可以通过通配符接收任意指定泛型类型的对象。
    1、匹配任意类型的通配符(?)
    Info<?> i = new Info(String)(); //使用?接收泛型对象
    2、受限泛型
    设置上限://范围上限使用extends关键字声明,表示泛型的类型可能是所指定的类型或者是此类型的子类

            // 只能接收Number及其Number的子类 
            声明对象: 类名称<? extends 类> 对象名称 ---> Info<? extends Number> i;    
    
            // 此处泛型只能是数字类型
            声明类:[访问权限] 类名称 <泛型标识 extends 类>{} ---> public Info<T extends Number>{}  
    
        设置下限://范围下限使用super进行声明,表示泛型的类型可能是所指定的类型,或者是此类型的父类型,或是Object类
    
            // 只能接收Number或Object类型的泛型,Number类的父类只有Object类
            声明对象:类名称<? super 类> 对象名称 ---> Info<? super Number> i;   
    
            // 此处泛型只能是数字类型
            声明类:[访问权限] 类名称 <泛型标识 extends 类>{} ---> public Info<T extends Number>{}
    

    解释:泛型与子类继承的限制。
      一个类的子类可以通过对象多态性,为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接收的。例如:Info不能使用Info

  • 相关阅读:
    第一张图:每天初始化交易流程图
    Django部署服务时候报错:SQLite 3.8.3 or later is required (found 3.7.17)
    LOJ2494. 「AHOI / HNOI2018」寻宝游戏
    luoguP4429 [BJOI2018]染色
    LOJ2720. 「NOI2018」你的名字
    LOJ2262. 「CTSC2017」网络
    LOJ2398. 「JOISC 2017 Day 3」自然公园
    ULR1 B. 【ULR #1】光伏元件
    CF Good Bye 2020 题解&总结 A~G
    vue 导入.md文件(markdown转HTML)
  • 原文地址:https://www.cnblogs.com/miniSimple/p/12344600.html
  • Copyright © 2011-2022 走看看