• Java 泛型


    1. 什么是泛型

      泛型指的是定义类、接口、方法的时候不局限于某种特定类型,而是让类、接口、方法的调用者决定使用哪种类型。

      泛型的本质是参数泛型化或者参数多态的应用,可以将泛型参数(操作的数据类型)作为方法签名中的一种特殊类型。泛型能够应用在类、接口、方法,就是泛型类、泛型接口、泛型方法。

      针对泛型化的数据类型使用不同数据类型编写相同的算法,加强系统数据类型和方法抽象化。

    2. 什么是方法签名

      方法声明两部分组成方法签名:方法的名称 + 方法的所有参数类型 = 方法签名;

    3. 泛型实现机制

      泛型擦除分为:泛型擦除编译处理细节、泛型擦除运行影响、泛型擦除反射影响。

      1. 泛型的类型擦除有哪些好处?

        1. 运行时内存负担小。

        2. 兼容性好。

      2. 泛型类型擦除有哪些问题?

        1. 基本数据类型无法做为泛型实参,而是使用包装器类型,比如:Integer、String等。所以,Java泛型在些处有性能消耗。不过,在Android中Google提供SparseArray解决些问题。

        2. 泛型类型无法用作方法重载。

        3. 泛型类型无法当做真实类型使用,这也是为什么方法中使用泛型,参数还要传类型原因。但是,可以用于其它泛型类型,如:new ArrayList<T>()

        4. 静态方法无法引用类泛型参数,但是,静态方法声明泛型类型参数,可以在静态方法中使用。

    public class SuperClass<T> {
    
        // 静态方法无法引用类泛型参数
        public static T test(T param) {}
    
        // 但是,静态方法声明泛型类型参数,再在静态方法中使用。
        public static <R> R test(R param) {}
        
    }

        5. 泛型类型在类型强转运行时开销。

      3. 泛型签名(写框架使用)

      泛型类型签名信息在特定场景下反射可获取。getGenericReturnType()

      泛型签名在运行时附加上去的,只影响反射。对其它不影响。通过反射获取泛型签名。

    4. 在泛型中的上界通配符和下界通配符

     (一)<?>或者<T> 等同于<? extends Object>

     (二)上界通配符(<? extends ClassA>)

        特性:只能取数据,不能存数据,即只能get,不能set。

        限定范围:包括ClassA类及其子类(派生类)。

     (三)下界通过符(<? super ClassB>)

        特性:能取/存数据,但是,返回数据类型是Object类型,要做二次强转。

        限定范围:包括ClassB类及其父类。

  • 相关阅读:
    iDirect IQ200 Evolution Option Config
    直播卫星接收设备参数
    QCA9531方案双通道嵌入式无线AP模块应用选型参考
    FanControl 机箱风扇控制软件
    硬盘基本知识(磁头、磁道、扇区、柱面)
    Registry keys for configuring Automatic Updates & WSUS
    CentOS6.5下简单的MySQL数据库操作
    临时搞两天VC,在VC里如何获取当前程序的名字和路径以及如何分割字符串
    COBOL中USAGE的用法
    sqlplus 帮助无法显示问题的解决
  • 原文地址:https://www.cnblogs.com/naray/p/8916596.html
Copyright © 2020-2023  润新知