为什么要深入一下泛型?

本人最近开始在深读一些源码,发现有些底层的一下设计理解的不是很透彻,很多优秀的框架用到了各种各样的设计模式外加一些泛型去实现,不审核将泛型进行理解,感觉总是一头雾水。

定义

聊到泛型,我们第一个想到的就是,这个东西到底是干什么的,我想很大一部分小伙伴应该也是仅仅停留在偶尔使用这个水平上面,至于再深入一些,估计能说出来的够呛。书上这么说,泛型,即“参数化类型”。说到参数,我们知道,定义方法的时候是形参,传递实参。那何为参数化类型?对比着上面的理解,其实也很容易,说白了就是将原来的类型进行参数化。操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

特性

泛型只在编译阶段有效。我们看下如下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16/**

* @Author: maoba

* @Description:

* @Date: 2020-05-27 22:48

*/

public class GenericsDemo{

public static void main(String[] args){

ListstringArrayList = new ArrayList();

ListintegerArrayList = new ArrayList();

Class classStringArrayList = stringArrayList.getClass();

Class classIntegerArrayList = integerArrayList.getClass();

if(classStringArrayList.equals(classIntegerArrayList)){

System.out.println("泛型测试类型相同");

}

}

}

最终我们输出的结果是“泛型测试类型相同”(大家可以直接拷贝本人的代码去运行一下)。这个结果说明了什么呢?说明在编译之后程序会采取去泛型化的措施。明明是不同的类型,但是class字节码却是同一份。也就是说明在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。简而言之,泛型信息不会进入到运行时阶段。

使用

开头的时候我们提到了,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。那么我们就分别来看一下这三种场景下泛型的使用。

泛型类

上述例子提到的List,说白了就是一个泛型类。我们还是自己写一个,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27/**

* @Author: mao ba

* @Description: 泛型类例子

* @Date: 2020-05-27 22:58

* 说明:以下代码,其中"T"的类型都是由外部传入所定

*/

public class GenericsClassDemo{

//内部定义一个T的属性

private T t;

//new出对象的时候传入该参数

GenericsClassDemo(T t){

this.t = t;

}

//再设置一个无参构造器

GenericsClassDemo(){

}

//同样地我们给T这个属性设置GET、SET方法、给 T传递值的时候有两种方式,

//1、通过构造器传递 2、通过set

public T getT(){

return t;

}

public void setT(T t){

this.t = t;

}

}

调用函数:

1

2

3

4

5

6

7

8

9

10

11public class GenericsTestMain{

public static void main(String[] args){

/**说明,以下传入参数,并不是只是规定的String,Integer,Long等等,自定义的类型亦可**/

GenericsClassDemostringGenericsClassDemo = new GenericsClassDemo("测试");

System.out.println(stringGenericsClassDemo.getT());

GenericsClassDemointegerGenericsClassDemo = new GenericsClassDemo();

integerGenericsClassDemo.setT(123);

System.out.println(integerGenericsClassDemo.getT());

}

}

输出结果,分别为:“测试”、“123”。

java video明星分类_分类: java基础 - 程序员老猫相关推荐

  1. 小程序video至于底部_一个18岁程序员的自学成长旅程 | 掘金年度征文

    大家好,我是Q1,00后,上星期(12.17)才满的18岁,但年龄并不能证明什么, 2019已经接近尾声了,这次主要想分享下我的编程旅途,还有学习方法以及收获, 感谢平台给了我这次机会. 起点 起点从 ...

  2. 软考程序员 c java 二选一_往年软考程序员试题分析及备考建议

    程序员考试上午科目和下午科目的考试形式与考核内容已经趋于稳定,考生应紧扣考试大纲和指南,有针对性地进行学习.本文针对近几年程序员级别的考题,分别就上午科目和下午科目的考核范围.形式和特点进行分析,以供 ...

  3. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  4. java好找工作吗_学Java的人那么多,工作好找吗怎么就业

    互联网行业是一个高速运转的行业,我们这个时代可以说是一个互联网的时代,不知不觉,你会发现,一切行业和事物都能和网络沾上边.作为IT开发中一直打持久战的职业,现在学Java还好找工作吗? Java工程师 ...

  5. java用什么书_学java用什么书比较好

    1 学java用什么书比较好 it行业现在的发展如日中天,很多人都纷纷走进这个行业,而java作为跨平台的编程语言更是受欢迎.java其实相对其他语言来说的确很有优势,但是也有点缺陷,但是以后发展到什 ...

  6. java jvm内存地址_深入Java虚拟机——JVM内存详解

    在C++中,程序员拥有每一个对象的所有权,但与此同时还肩负着释放对象内存空间的责任:而Java由于有了虚拟机的帮助,程序员拥有对象的所有权的同时不再需要释放对象的内存空间.由于是JVM自动进行对象内存 ...

  7. java 注解应用技巧_改善Java应用程序性能的快速技巧

    java 注解应用技巧 曾经遇到过性能问题吗? 我也是. 如果我的经理再喊一次" faaaaster",我一生都会有听力障碍. 顺便说一句,我能听到所有噪音中的德语发音吗? ;-) ...

  8. 北京java研发平均工资_各地java开发工程师平均工资 北京高级java开发工程师工资2万多...

    原标题:各地java开发工程师平均工资 北京高级java开发工程师工资2万多 java开发工程师工资水平一直都是程序员们比较关注的话题,毕竟java是最热门的编程的语言.每个城市的由于经济水平的差距, ...

  9. java定义数组长度_在JAVA中定义数组时,可不可以一开始不设定数组的长度?

    定义时当然可以:例如 int[] a; 但是要把它初始化成为一个真正意义上的数组就必须设定长度: int [] a = new int[10]; 这时就只能改变数组里的数值而不能改变它的长度了. Ja ...

最新文章

  1. 使用回调函数实现图像阈值分析。程序运行后在屏幕中输入阈值,通过改变滑动条实现不同类型的二值化图。
  2. SQL 语句时间比较
  3. java jol原理_Java对象布局(JOL)实现过程解析
  4. python wordpress xmlrpc_python-markdown自动发送wordpress文章(python-xmlrpc-wordpress)
  5. C++学习之路 | PTA乙级—— 1014 福尔摩斯的约会 (20分)(精简)
  6. 2020年上半年短视频内容发展盘点报告
  7. Qt creator5.7 OpenCV249之高斯滤波(含源码下载)
  8. “暂时没有对您所在的地区提供下载和试听服务”的解决办法
  9. ddmmyy日期格式是多少_如何在Excel 2013/2016/2019中将mmddyyyy文本转换为普通日期格式...
  10. Silverlight开发的15个最佳实践
  11. c语言数组转指针,(转)c语言指针数组
  12. 计算机课ppt插入图片,ppt2010官方基础教程:插入照片-powerpoint技巧-电脑技巧收藏家...
  13. linux中把程序启到前台,Linux程序前台后台切换
  14. 8.局部变量、成员变量、jvm垃圾回收机制 、封装、this关键字、匿名对象
  15. SQL Server高级编程
  16. 打乱魔方软件_怎样打乱魔方
  17. 最新国产操作系统uos一小时使用体验
  18. python自带库zlib_python中的zlib解压
  19. 深访杨超越杯编程大赛发起人 还原硬核粉丝追星全过程
  20. POE供电 网线 电源 网络情况图

热门文章

  1. Python脚本制作exe程序超详细!
  2. (转)安装SQL Server:以前某个程序安装时挂起了文件操作,安装程序前请重启
  3. Cesium中的各个坐标拾取
  4. pytorch TorchScript 简介
  5. Java读取Hdfs的文件数据出现乱码的解决方案和办法
  6. 电流电压与欧姆定律与基尔霍夫定律
  7. 榜首易主!在线票务大战胜负已定,透过中影这个小动作早已看穿一切
  8. 基于微信小程序的在线考试系统开题报告
  9. 74LS244 三态门 功能介绍
  10. 关于手工制作PCB印刷电路板的镜像操作详解【干货】