今天来和大家说一下泛型

泛型

打开我们的 API 看到在集合后面有一个尖括号,这个里面要填一个引用数据的数据类型,作用就是限定这个集合中只增存储该类型的数据~

Java中的泛型_泛型

下面我来写一段代码给大家解释一下

Java中的泛型_数据_02

这是我们之前遍历集合的方式~,现在假设我们想获取集合内对象的属性,修改代码再运行一下~

Java中的泛型_泛型类_03

报错了,类型转换异常~

Java中的泛型_工具类_04

我们写代码的时候并没有提示错误

编译没有报错

结果运行的时候出错了

Java中的泛型_泛型类型_05

稍等

这个bug可以解决

这个时候就体现了泛型的好处了——可以提高安全性(将运行期的错误转换到编译期) ,省去强转的麻烦。下面咱们来使用泛型解决这个问题~

 泛型的使用方法:

将<>中放的必须是引用数据类型 

Java中的泛型_泛型类型_06

这三种不属于 person 类型的数据直接就报错~编译就不通过了

Java中的泛型_数据_07

怎么样是不是很厉害~

在使用泛型的时候要注意:

前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)  

下面给大家解释一下泛型的由来~

我们创建了两个对象类 worker1 和 worker2,这两个类都继承 person 类,然后在写一个工具类 Tool~

Java中的泛型_工具类_08

现在我们来用Tool工具类来创建一个对象~

Java中的泛型_数据_09

编译没有问题,但是运行代码就报错了,因为早期的 Object 类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题,存在隐患。所以Java提供了泛型来解决这个安全问题~

现在我们用泛型来解决这个问题,直接把泛型定义在类上——这就是泛型类了

格式

public class 类名<泛型类型1,…>

注意事项

泛型类型必须是引用类型

给 Tool 工具类定义一个泛型(可以是任意字符)这个意思就是,你传进来是什么类型,我就是什么类型~

Java中的泛型_泛型类型_10

这下再来看之前的代码,直接就提示我们代码有错误了~

Java中的泛型_泛型类_11

修改之后,代码就可以正常运行了

Java中的泛型_泛型类型_12

泛型除了可以定义在类上也可以定义在方法上,称为泛型方法

格式

public <泛型类型> 返回类型 方法名(泛型类型 变量名)

代码演示

Java中的泛型_泛型类型_13

注意:

方法泛型最好与类的泛型一致,如果不一致,需要在方法上声明该泛型

静态方法必须声明自己的泛型

最后就是可以把泛型定义在接口上——泛型接口

格式 :

public interface 接口名<泛型类型>

代码演示:

我们定义了一个泛型的接口,用两种方法来实现泛型接口,当然我实现接口的目的就是给类添加功能,没有必要把整个类变成泛型类,所以一般我们推荐使用上面这种方式~

Java中的泛型_数据_14

那么

今天就到这里了

微信公众号:javafirst

扫码关注免费获取更多资源 

Java中的泛型_数据_15