泛型的一些用法

泛型是Java语言中的一个重要特性,它可以让我们编写更加通用、灵活的代码。在Java中,泛型可以应用于类、接口、方法等多个方面,它可以帮助我们避免类型转换的麻烦,提高代码的可读性和可维护性。

根据业务我写了一个通用的泛型处理,应用场景:由于很多业务都有一个审批功能,而后需要把这些审批功能全部汇总到一个公共的待审批业务,在这个待审批业务中进行快捷审批

对此便设计了一个泛型方法:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
     *
     * @param object 业务对象
     * @param isEdit 是否修改
     * @return 修改or新增
     */
    @Override
    public <T extends BusinessObject> int addAuditBusiness(T object, boolean isEdit) {
        BusinessAuditlist businessAuditlist = null;
        if (isEdit) {
            businessAuditlist = businessAuditlistMapper.selectByApplyId(object.objectApplyId());
        }else {
            businessAuditlist = new BusinessAuditlist();
        }
        businessAuditlist.setBusinessType(object.objectBusinessType());
        businessAuditlist.setBusinessTypeName(object.objectBusinessTypeName());
        businessAuditlist.setSysDeptName(object.objectSysDeptName());
        businessAuditlist.setSysDeptId(object.objectSysDeptId());
        businessAuditlist.setBasicsDeptId(object.objectBasicsDeptId());
        businessAuditlist.setBasicsDeptName(object.objectBasicsDeptName());
        businessAuditlist.setApplyUserId(object.objectApplyUserId());
        businessAuditlist.setApplyUserName(object.objectApplyUserName());
        businessAuditlist.setApplyId(object.objectApplyId());
        businessAuditlist.setAssetsIds(object.objectAssetsIds());
        businessAuditlist.setAssetsCount(object.objectApplyNum());
        businessAuditlist.setCategoryTypes(object.objectAssetsType());
        businessAuditlist.setAuditStatus(object.objectAuditStatus());
        businessAuditlist.setApplyCauser(object.objectApplyCauser());
        businessAuditlist.setAnnex(object.objectAnnex());
        if (businessAuditlist.getId() != null) {
            return this.updateBusinessAuditlist(businessAuditlist);
        }else {
            return this.insertBusinessAuditlist(businessAuditlist);
        }
    }

  其中使用T extends BusinessObject  来指定泛型的上下限,传进来的对象必须继承或者实现BusinessObject 类,而后我在BusinessObject  类中写了一些通用方法,例如将待审批的ID等通过实体类重写方法的形势进行赋值

BusinessObject 类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.jeethink.project.business.common;
 
 
public interface BusinessObject {
    //业务类型
    String objectBusinessType();
    //业务类型名称
    String objectBusinessTypeName();
    //单位名称
    String objectSysDeptName();
    //单位
    Long objectSysDeptId();
    //部门ID
    Long objectBasicsDeptId();
    //部门名称
    String objectBasicsDeptName();
    //使用人
    Long objectApplyUserId();
    //使用人名称
    String objectApplyUserName();
    //业务所属ID
    Long objectApplyId();
    //资产ID数组
    String objectAssetsIds();
    //资产编号数组
    String objectAssetsNums();
    //资产数量
    Long objectApplyNum();
    //资产类型
    String objectAssetsType();
    //审核状态
    String objectAuditStatus();
    //申请原因
    String objectApplyCauser();
    //申请附件
    String objectAnnex();
}

  实现类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public class AssetsReceive extends BaseEntity implements BusinessObject
{
      @Override
    public String objectBusinessType() {
        return "AssetsReceive";
    }
 
    @Override
    public String objectBusinessTypeName() {
        return "资产领用";
    }
 
    @Override
    public String objectSysDeptName() {
        return this.sysDeptName;
    }
 
    @Override
    public Long objectSysDeptId() {
        return this.sysDeptId;
    }
 
    @Override
    public Long objectBasicsDeptId() {
        return this.basicsDeptId;
    }
 
    @Override
    public String objectBasicsDeptName() {
        return this.basicsDeptName;
    }
 
    @Override
    public Long objectApplyUserId() {
        return this.userId;
    }
 
    @Override
    public String objectApplyUserName() {
        return this.userName;
    }
 
    @Override
    public Long objectApplyId() {
        return this.id;
    }
 
    @Override
    public String objectAssetsIds() {
        return this.assetsIds;
    }
 
    @Override
    public Long objectApplyNum() {
        return this.applyNum;
    }
 
    @Override
    public String objectAssetsType() {
        return this.applyAssetsType;
    }
 
    @Override
    public String objectAssetsNums() {
        return this.assetsNums;
    }
 
    @Override
    public String objectAuditStatus() {
        return this.auditStatus;
    }
 
    @Override
    public String objectApplyCauser() {
        return this.applyCauser;
    }
 
    @Override
    public String objectAnnex() {
        return this.annex;
    }
}

  至此便实现了通用的审批需求,代码的复用性很高,原先需要写N个业务审批,现在就只需要对应的实体类实现此接口,而后调用这个泛型方法即可

posted @   jiangyang6634  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示