查看原文
其他

Java中的泛型

Java面试 2020-10-17

今天来和大家说一下泛型


泛型


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



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



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


报错了,类型转换异常~


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

编译没有报错

结果运行的时候出错了


稍等

这个bug可以解决


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


 泛型的使用方法:

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



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


怎么样是不是很厉害~


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

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


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


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



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



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


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


格式

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


注意事项

泛型类型必须是引用类型


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



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



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



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


格式

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


代码演示


注意:

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

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


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


格式 :

public interface 接口名<泛型类型>


代码演示:

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



那么

今天就到这里了


扩展阅读

Java中的集合——ArrayList类和LinkedList类

Java中的集合——list和Vector

Java中的集合——Collection类和迭代器

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存