利用泛型我们能做些什么?
前面简单的提到了泛型的使用,这节我们来看看泛型可以用来做些什么。
以下内容介绍都是我项目中遇到的,主要已 Hibernate 来做持久层,如果是经常使用 Mybatis 的小伙伴可能觉得我讲的东西完全没有遇到过,那可以当一个列子来看一下。
现在我们主流的设计架构都是 MVC 架构,在我们的系统中,进行过最多的就是对单表的增删改查,有时我们还要加上分页,按特定字段查询什么的。
久而久之,你会发现,自己好像在做很多重复的工作,很多代码在控制层写一遍,在服务层又写一遍,重点是每个方法都好像是差不多的。
例如一个新增的请求进来,新增一名学生,我要给这个实体插入 ID ,则写一句 ,下次新增一位老师,又写一遍这个设置 ID 操作,真的是太繁琐了。
我们来看一下列子,有两个类(对应数据库两张表),他们都有一个名字,ID 是唯一字段,那么在新增的时候,前端传过来只会带有一个名字,我们在进行持久化操作时,得给他们手动添加 ID (设置自增除外)。
不难看出,上述代码中,对于每一个新增的实体,我们都要进行重复的操作(设置ID),可能会出现更多的重复操作,具体看是否有相同的业务要求。
那么对于上述情况,我们有没有办法改变它,使每一个服务层,我只需要简单的一行代码就可以搞定了呢?
利用泛型。
我们先定义一个接口,只有简单的一个方法,设置 ID,实际上会有更多的重复操作
然后,我们再将 类 和 类实现这个接口(接口中的方法刚好是实体类中的 get 和 set 方法),这时候我们可以看到,我们只要操作 PoInterface 这个接口的 setID() 方法,就可以直接为两个实体类设置 ID 了,我们来看一下代码,写一个泛型工具类
有了这个工具类后,我们可以在每个 Service 层方法中调用,只要需要新增 ID 的,只需要一行代码就可以了
或许大家觉得这好像并没有减少多少开发量,你可以这么想一下,我一个方法中,不止是设置 ID ,还要分页,控制分页数据,对不同实体就会有不同的 DAO ,那么我们也可以将其封装成一个工具类,利用泛型限定传参来简化代码。
我们来看看
上述代码中,不止实体类用泛型就行传递,连 DAO 也利用里泛型传递,继承统一接口,统一实现了对 list,单个数据的操作即可,逻辑不需要很复杂,那么这样我在每一个 Service 层中,只要不需要用到很难的逻辑处理业务的,都可以直接调用泛型工具类进行操作
泛型可以让我们简化很多重复的操作,我贴出来的只是我发现的一小部分,更多的大家可以多多实践一下。
领取专属 10元无门槛券
私享最新 技术干货