泛型的一些用法
泛型是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个业务审批,现在就只需要对应的实体类实现此接口,而后调用这个泛型方法即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)