什么是java泛型_什么是Java泛型?

一、泛型的概念

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

字符串类型:

●private int age; .

●private String age;

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

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

DEMO:使用Obejct作为age的类型什么是java泛型_什么是Java泛型?_第1张图片

什么是java泛型_什么是Java泛型?_第2张图片

什么是java泛型_什么是Java泛型?_第3张图片

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

DEMO:把年龄设置为字符串什么是java泛型_什么是Java泛型?_第4张图片

什么是java泛型_什么是Java泛型?_第5张图片

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

DEMO:观察风险什么是java泛型_什么是Java泛型?_第6张图片

761be273b307faf7cc7e6c1b2635a125.png

2ec37f275730c5e44a4b2920141c05d9.png

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

DEMO:定义一一个泛型类什么是java泛型_什么是Java泛型?_第7张图片

什么是java泛型_什么是Java泛型?_第8张图片

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

DEMO:使用泛型类创建对象e2347f6cb230d083a81f4ad56ef37ba4.png

什么是java泛型_什么是Java泛型?_第9张图片

什么是java泛型_什么是Java泛型?_第10张图片

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

DEMO:使用int作为泛型的类型什么是java泛型_什么是Java泛型?_第11张图片

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

DEMO:使用基本数据类型的包装类作为泛型什么是java泛型_什么是Java泛型?_第12张图片

总结:

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

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

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

0a2e5a0965a3c0d6dba9e31d18c7fa39.png

你可能感兴趣的:(什么是java泛型)