什么是泛型?为什么使用泛型?

  泛型,就是参数化类型。提到参数,最熟悉的就是定义方法时候的形参,然后调用此方法时传递实参。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义为参数形式(可以称之为类型参数),然后在使用/调用时传入具体的类型(类型实参)。

  泛型的本质是为了参数化类型(再不创建新的类型的情况下,通过泛型指定的不同的类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数可以用在类、接口和方法中,分别称之为泛型类、泛型接口和泛型方法。

泛型的特性:

  泛型只在编译阶段有效,在编译之后程序会采取去泛型化的措施,也就是说Java中的泛型只在编译阶段有效,在编译过程中,正确检验泛型结果后会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检验和类型转换的方法,也就是说类型信息不会进入到运行阶段。

泛型的使用:

泛型的使用有三种方式:泛型类、泛型接口、泛型方法

一、泛型类:

泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放的是相同的接口。

具体的应用实例:

特别说明:定义的泛型类,并不一定要传入泛型类型实参。在使用泛型的时候如果传入的是泛型实参,则会根据传入的泛型实参作相应的限制,此时泛型才会起到本应起到的限制作用;如果不传入泛型类型实参的话,在泛型类中使用泛型的方法或者成员变量定义的类型可以是任何类型;泛型的类型参数只能是类类型,不能是简单类型。不能对确切的泛型类型使用instanceOf操作,否则编译器会报错。

二、泛型接口:

泛型接口与泛型类的定义以及使用基本是相同的,泛型接口常被用在各种类的生产器中。

1、泛型接口的基本用法(定义一个泛型接口):

2、当实现泛型接口的类,未传入泛型实参时:

当实现泛型接口的类没有传入泛型实参的情况时,与泛型类的定义相同,在声明类时需要将泛型的声明也一起加到类中。即:class FruitGenerator<T> implements Generator<T>{};

3、当实现泛型接口的类传入泛型实参的时候:

相当于定义了一个生产器实现这个接口,虽然我们只创建了一个泛型接口,但是因为泛型接口中参数类型是不确定的,所以可以形成无数种类型的Generator接口。在实现泛型接口的实现类中,如果传入了泛型实参,那么在这个类中所有使用该泛型类型的地方都要替换成成传入的实参类型。

注意:同一种泛型可以对应多个版本(因为参数类型是不确定的),但是不同的泛型参数的泛型实例之间是不兼容的。

4、泛型方法

泛型类实在实例化类的时候指明泛型的具体类型;泛型方法实在调用方法的时候指明泛型的具体类型。

说明:

  • public和返回值 之间的<T>非常重要,可以理解为声明此方法为泛型方法。
  • 只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
  • <T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
  • 与泛型类的定义一样,T只是一个标识符,可以随便写。

4.1、泛型方法的基本用法

泛型方法中一个比较特殊的情况就是泛型方法出现在泛型类中

注意:class GenerateTest<T>这是一个泛型类,那么在里边包含的三个方法其中show_1只是一个普通的方法,只是这个方法存在于泛型类里边,
但它所包含的参数T是和泛型类中的T一致的;show_3,show_2这两个方法是泛型类里的泛型方法,他们所含的泛型方法是一个全新的类型,可以和泛型类中声明的T一样,也可以 不一样。

泛型方法的总结:泛型方法能使方法独立于类而产生变化,一个基本的原则就是:无论何时,就应该尽量使用泛型方法 。

5、泛型边界

Ø  为泛型添加上边界,即是传入的类型实参必须是指定类型的子类型
Ø  在泛型方法中添加上下边界限制的时候,必须在权限说明与返回值之间的<T>之间添加上下边界,即是在泛型声明的时候添加。泛型的上下边界添加,必须与泛型的声明在一起

6、关于泛型数组

     不能创建一个确切的泛型类型的数组,而使用通配符创建泛型数组是可以的。

Java基础知识--泛型的更多相关文章

  1. Java基础知识➣泛型整理(四)

    概述 泛型的本质是参数化类型,使用同一套代码来满足不同数据类型的业务需要,提高代码的执行效率,使代码简单明了. 泛型方法 该方法在调用时可以接收不同类型的参数.根据传递给泛型方法的参数类型,编译器适当 ...

  2. Java 基础知识总结

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

  3. 【考试】java基础知识测试,看你能得多少分?

    1 前言 共有5道java基础知识的单项选择题,每道20分,共计100分.解析和答案在最后. 2 试题 2.1 如下程序运行结果是什么? class Parent { public Parent(St ...

  4. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  5. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  6. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  7. Java 基础知识总结1

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.数据类型:  数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte  8位   (by ...

  8. java基础知识一览(二)

    一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...

  9. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

随机推荐

  1. Ubuntu下Gradle环境配置

    sudo gedit ~/.profile sudo source ~/.profile env # for java export JAVA_HOME=/home/cmm/jdk export CL ...

  2. Redis cluster集群模式的原理

    redis cluster redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求 自动将数据进行分片,每个master上放一部分数据 提供内 ...

  3. MQ消息队列之MSMQ

    主要参考文章: 消息队列(Message Queue)简介及其使用

  4. PHP使用Apache中的ab测试网站的压力性能及mpm介绍

    打开Apache安装的bin目录 shift+鼠标右键 复制粘贴以下代码->回车 ab -n 1000 -c 100 http://localhost/test.php 上例表示总共访问http ...

  5. 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望

    原文链接https://www.cnblogs.com/zhouzhendong/p/9781060.html 题目传送门 - NowCoder Wannafly 26D 题意 放一放这一题原先的题面 ...

  6. springmvc+ajax——第三讲(post请求)

    在ajax01.html中增加个input标签: 在ajax的js中增加: 在controller中仍然使用getParamter():

  7. 深入理解Python中赋值、深拷贝(deepcopy)、浅拷贝(copy)

    赋值 python跟java中的变量本质是不一样的,Python的变量实质上是一个指针(int型或str型),而java的变量是一个可操作的存储空间. a = 123b = a print(id(a) ...

  8. Centos7服务器中通过编译源码安装MySQL

    基于在Centos7服务器上使用 yum 安装MySQL5.7到默认路径 在修改文件存储位置的时候,折腾了一番没有将成功将datadir修改为我想要的位置 我决定再尝试一下通过编译源码来自定义安装: ...

  9. HDU 4553 约会安排 (区间合并)【线段树】

    <题目链接> 寒假来了,又到了小明和女神们约会的季节.  小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有 ...

  10. 002.MySQL高可用主从复制部署

    一 基础环境 主机名 系统版本 MySQL版本 主机IP master CentOS 6.8 MySQL 5.6 172.24.8.10 slave01 CentOS 6.8 MySQL 5.6 17 ...