泛型的一些用法

泛型是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个业务审批,现在就只需要对应的实体类实现此接口,而后调用这个泛型方法即可

posted @ 2023-04-21 10:17  jiangyang6634  阅读(52)  评论(0)    收藏  举报