zoukankan      html  css  js  c++  java
  • Java基础(七)

    一、为什么要使用泛型程序设计

    泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。

    类型参数是魅力在于:使得程序具有更好的可读性和安全性。

    二、定义简单泛型类

    一个泛型类就是具有一个或多个类型变量的类。

    在Java库中,使用变量E表示集合的元素类型;K和V分别表示表的关键字和值的类型;T(需要时还可以用临近的字母U和S)表示“任意类型”。

    泛型类可看做普通类的工厂。

    三、泛型方法

    泛型方法可以定义在普通类中,也可以定义在泛型类中。

    四、类型变量的限定

    可以通过对类型变量T设置限定实现将T限制为实现了某个接口的类。

    语法:

    <T extends BoundingType>

    表示T应该是绑定类型的子类型。T和绑定类型可以是类,也可以是接口。

    限定类型用“&”分隔,而逗号用来分隔类型变量。

    在Java的继承中,可以根据需要拥有多个接口超类型,但限定中至多有一个类。

    如果用一个类作为限定,它必须是限定列表中的第一个。

    五、泛型代码和虚拟机

    无论何时定义一个泛型类型,都自动提供了一个相应的原始类型。原始类型的名字就是删去类型参数后的泛型类型名。擦除类型变量,并替换为限定类型(无限定的变量用Object)。

    当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。

    虚拟机中没有泛型,只有普通的类和方法。

    所有的类型参数都用它们的限定类型替换。

    桥方法被合成来保持多态。为保持类型安全性,必要时插入强制类型转换。

    六、约束和局限性(大部分限制是由类型擦除引起的)

    1、不能用基本类型实例化类型参数。

    2、运行时类型查询只适用于原始类型。

    3、不能创建参数化类型的数组。

    4、Varargs警告,可以使用@SafeVarargs标注来消除创建泛型数组的有关限制。

    5、不能实例化类型变量。

    6、不能构造泛型数组。

    7、泛型类的静态上下文中类型变量无效。

    8、不能抛出或捕获泛型类的实例。

    9、通过使用泛型类,擦除和@SuppressWarnings注解,就能消除Java类型系统的部分基本限制。可以消除对受查异常的检查。

    10、注意擦除后的冲突。

    七、泛型类型的继承规则

    无论S和T有什么关系,通常,Pair<S>和Pair<T>没有什么联系。

    八、通配符类型

    通配符的超类型限定:带有超类型限定的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取。

    无限定通配符:Pair<?>和Pair本质的不同在于:可以用任意Object对象调用原始Pair类的setObject方法。

  • 相关阅读:
    第2章 NIO入门
    Docker Compose命令详解
    网络层相关术语解释
    linux查看并发连接数
    带宽计算方法
    ELK日志分析平台搭建
    mysql查找json格式列的指定字段值
    Oracle性能优化
    修改hosts文件不需要重启的方法
    freeswitch的internal的profile无法启动
  • 原文地址:https://www.cnblogs.com/libinhyq/p/12295686.html
Copyright © 2011-2022 走看看