泛型的一些用法
泛型是Java语言中的一个重要特性,它可以让我们编写更加通用、灵活的代码。在Java中,泛型可以应用于类、接口、方法等多个方面,它可以帮助我们避免类型转换的麻烦,提高代码的可读性和可维护性。
根据业务我写了一个通用的泛型处理,应用场景:由于很多业务都有一个审批功能,而后需要把这些审批功能全部汇总到一个公共的待审批业务,在这个待审批业务中进行快捷审批
对此便设计了一个泛型方法:
/**
*
* @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 类:
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();
}
实现类:
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个业务审批,现在就只需要对应的实体类实现此接口,而后调用这个泛型方法即可
浙公网安备 33010602011771号