程序地带

什么是Java泛型?


一、泛型的概念 如果要求在一个类中定义一个保存年龄的属性,这个属性定义为int还可以定义


字符串类型:


●private int age; .


●private String age;


此时可以使用什么类型能表示这两种类型呢?首先想到的是Object类,该类是所有类型的父类,那么就可以使用该类型表示这个年龄的属性,因为子类类型可以向上转型为Object。


Object是Java提供的一个最大父类,Java提供的所有其他引用类型的类都继承这个类,比如说String 类。


DEMO:使用Obejct作为age的类型 在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


以上的代码可以实现一个类型(Object) 能表示其他类型,还能表示字符串。


DEMO:把年龄设置为字符串


点击并拖拽以移动​


点击并拖拽以移动​


使用Object可以实现需求,但是这个过程涉及到了向下转型,向下转型存在类型转换异常的风险(而且这个类型转换异常要运行时候才会出现)。如果保存的时候是字符串类型的数据,获取的时候转成int就出现了类型转换异常。


DEMO:观察风险


点击并拖拽以移动​


点击并拖拽以移动​


程序出现了类型转换异常,那么原因是Object类型的范围太大了,所以向下转型存在风险,此时泛型就登场,泛型就是在定义类的时候给出一个占位符标记,占位符的具体类型是在实例化对象的时候根据需求给出的,这样的类就是泛型类。


DEMO:定义一一个泛型类


点击并拖拽以移动​


点击并拖拽以移动​


以上的泛型类中的“T”就是一个占位符标记,在实例化对象之前不知道其类型,只有在实例化对象的时候指定出T的具体类型。


DEMO:使用泛型类创建对象


点击并拖拽以移动​


点击并拖拽以移动​


点击并拖拽以移动​


以上的使用了泛型避开了之前的向下转型,不存在类型转换异常的风险。


DEMO:使用int作为泛型的类型


点击并拖拽以移动​


以上的代码提示错误:表示不能使用int类型java基础作为泛型的类型,在泛型中如果要使用基本数据类型必须使用其包装类代替。


DEMO:使用基本数据类型的包装类作为泛型


点击并拖拽以移动​


总结:


1、一个类型不确定的时候需要使用一个占位符标记占位,之后实例化对象的时候具体根据需要确定出泛型的类型。


2、泛型没有向下转型的风险。


3、Java泛型(generics) 是JDK5中引入的-一-个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型。使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。泛型对于集合类尤其有用,例如,ArrayList 就是一个无处不在的集合类。


以下是我整理的Java学习资料免费提供


详细的java系统视频免费学习地址


有完整的Java初级,高级对应的学习路线和资料!专注于java开发。分享java基础、原理性知识、JavaWeb实战、spring全家桶、设计模式、分布式及面试资料、开源项目,助力开发者成长!


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chinaherolts2008/article/details/112689509

随机推荐

python 温度插值nan处理_python-2D数组中的NaN插值.人口稀少

我有一些NaN值的二维数组.我想使用我拥有数据的位置来修补(插值)这些值.该数组如下所示.如果可能的话,我想进行插值,以便当我远离非NaN值时,我会越来越接近值0.我怎样才能做到这一点?...

weixin_39953244 阅读(734)

360OS张焰:AI视觉在教育中的应用

360OS张焰:AI视觉在教育中的应用

 11月24日,由即构科技主办的2020GET大会教育科技分论坛在北京成功召开,来自叮咚课堂、小冰、360OS、蕃茄田艺术、即构科技的6位资深教育/科技大咖,...

ZEGO即构科技 阅读(254)

mysql索引最左匹配原则的理解

 这里需要提醒的是:mysql的执行计划和查询的实际执行过程并不完全吻合。如何证明这一点呢?真正的执行过程可以通过mysql的trace工具来分析。1,针对执...

弘博学习网 阅读(736)

python 温度插值nan处理_在Pandas中处理NaN值的方法

关于NaN值-在能够使用大型数据集训练学习算法之前,我们通常需要先清理数据,也就是说,我们需要通过某个方法检测并更正数据中的错误。-任何给定数据集可能会出现各种糟糕的数据&...

鹿汀 阅读(987)

@resource注解_面试说说springmvc常用的一些注解

@resource注解_面试说说springmvc常用的一些注解

面试遇到这个鬼虽说是很正常的问题,但是还是得好好的整理下@Controller只是定义了一个控制器类@RequestMapping用来处理请求地址映射的注解是真正处理请求...

weixin_39666496 阅读(599)

bootstrap 固定最底部_BootstrapTable固定头和底部

版本选择采用的bootstrapTable样式与js的版本是1.15.4,采用比较低的版本会在有滚动条的情况下,表格不对齐需要引用的CSS与js客户名称其他名称9月09星期...

黄一孟 阅读(246)

Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类

当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。和String类不同的是,StringBuffer和StringBuilder类的...

滑翔小飞侠 阅读(360)