Java中的泛型
今天来和大家说一下泛型
泛型
打开我们的 API 看到在集合后面有一个尖括号,这个里面要填一个引用数据的数据类型,作用就是限定这个集合中只增存储该类型的数据~
下面我来写一段代码给大家解释一下
这是我们之前遍历集合的方式~,现在假设我们想获取集合内对象的属性,修改代码再运行一下~
报错了,类型转换异常~
我们写代码的时候并没有提示错误
编译没有报错
结果运行的时候出错了
稍等
这个bug可以解决
这个时候就体现了泛型的好处了——可以提高安全性(将运行期的错误转换到编译期) ,省去强转的麻烦。下面咱们来使用泛型解决这个问题~
泛型的使用方法:
将<>中放的必须是引用数据类型
这三种不属于 person 类型的数据直接就报错~编译就不通过了
怎么样是不是很厉害~
在使用泛型的时候要注意:
前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
下面给大家解释一下泛型的由来~
我们创建了两个对象类 worker1 和 worker2,这两个类都继承 person 类,然后在写一个工具类 Tool~
现在我们来用Tool工具类来创建一个对象~
编译没有问题,但是运行代码就报错了,因为早期的 Object 类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题,存在隐患。所以Java提供了泛型来解决这个安全问题~
现在我们用泛型来解决这个问题,直接把泛型定义在类上——这就是泛型类了
格式
public class 类名<泛型类型1,…>
注意事项
泛型类型必须是引用类型
给 Tool 工具类定义一个泛型(可以是任意字符)这个意思就是,你传进来是什么类型,我就是什么类型~
这下再来看之前的代码,直接就提示我们代码有错误了~
修改之后,代码就可以正常运行了
泛型除了可以定义在类上也可以定义在方法上,称为泛型方法
格式
public <泛型类型> 返回类型 方法名(泛型类型 变量名)
代码演示
注意:
方法泛型最好与类的泛型一致,如果不一致,需要在方法上声明该泛型
静态方法必须声明自己的泛型
最后就是可以把泛型定义在接口上——泛型接口
格式 :
public interface 接口名<泛型类型>
代码演示:
我们定义了一个泛型的接口,用两种方法来实现泛型接口,当然我实现接口的目的就是给类添加功能,没有必要把整个类变成泛型类,所以一般我们推荐使用上面这种方式~
那么
今天就到这里了