阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单介绍Lombok使用@Tolerate实现冲突兼容问题

34次阅读
没有评论

共计 2871 个字符,预计需要花费 8 分钟才能阅读完成。

导读 这篇文章主要介绍了 Lombok 使用 @Tolerate 实现冲突兼容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
使用 @Tolerate 实现冲突兼容

使用 Lombok 能够减少程序员的重复工作提高工作效率,而 Lombok 的注解基本是基于标准的(如,标准的 Builder 模式),而实际开发的时候有时候为了实现某些能力会对标准实现做一些变形,而这个时候 Lombok 的标准实现就会无法满足需求。

例如,这样一个场景

使用 @Builder 对一个 DTO 实现一个构造器,但是在做 Json 反序列化的时候发生错误,

原因就是缺少无参公共的构造函数,

而手动写一个无参构造函数的时候编译错误,就是和 @Builder 冲突,虽然标准的 @Builder 没法是需要私有化构造函数的,但是在某些场景下我们需要对这种标准变形,这个时候 Lombok 提供了 @Tolerate 实现对冲突的兼容。

/**
 * 
 * 包括能力、知识点等
 * 
 *
 * @author hlong
 * @since 2020-09-10
 */
@Data
@Entity
@Table(name = "que_attr")
@Builder
@ApiModel(value="QueAttr 对象", description="包括能力、知识点等")
public class QueAttr implements Serializable {
  
    @Tolerate
    QueAttr() {}
  
    private static final long serialVersionUID = 1L;
  
    @ApiModelProperty(value = "属性编号,系统自动产生")
    @Id
    @Column(name = "attr_id")
    private Long attrId;
  
    @ApiModelProperty(value = "属性编码")
    @Column(name = "attr_code")
    private String attrCode;
  
    @ApiModelProperty(value = "属性名称")
    @Column(name = "name")
    private String name;
  
    @ApiModelProperty(value = "属性名称中文")
    @Column(name = "name_cn")
    private String nameCn;
  
    @ApiModelProperty(value = "简称")
    @Column(name = "name_short")
    private String nameShort;
  
    @ApiModelProperty(value = "上级节点")
    @Column(name = "attr_up")
    private Long attrUp;
  
    @ApiModelProperty(value = "级别:第 1 级为 0")
    @Column(name = "lev")
    private Integer lev;
  
    @ApiModelProperty(value = "从小到大,从 1 开始")
    @Column(name = "sort_no")
    private Integer sortNo;
  
    @ApiModelProperty(value = "( 枚举) 属性分类信息 见字典表,这里主要是能力和知识点")
    @Column(name = "attr_type")
    private Long attrType;
  
    @ApiModelProperty(value = "机构编号:0 公司")
    @Column(name = "org_id")
    private Long orgId;
  
    @Column(name = "subject")
    private Long subject;
  
    @Column(name = "key_stage")
    private Long keyStage;
  
    @Column(name = "grade")
    private Long grade;
  
    @Column(name = "term")
    private Integer term;
  
    @ApiModelProperty(value = "添加人")
    @Column(name = "user_create")
    private Long userCreate;
  
    @ApiModelProperty(value = "- 1 删除 0 草稿 1 有效")
    @Column(name = "status")
    private Integer status;
  
    @Column(name = "sys_code")
    private Long sysCode;
  
    @ApiModelProperty(value = "更新时间")
    @Column(name = "time_update")
    private Timestamp timeUpdate;
  
    @ApiModelProperty(value = "备注")
    @Column(name = "remark")
    private String remark;
  
    @ApiModelProperty(value = "属性的 uuid")
    @Column(name = "attr_uuid")
    private String attrUuid;
  
    @ApiModelProperty(value = "属性的父级 uuid")
    @Column(name = "attr_up_uuid")
    private String attrUpUuid;
  
    @ApiModelProperty(value = "教材版本 uuid")
    @Column(name = "book_code")
    private String bookCode;
  
    @ApiModelProperty(value = "教材版本名称")
    @Column(name = "book_name")
    private String bookName;
  
    @ApiModelProperty(value = "年级的 code- 学院 code")
    @Column(name = "grade_uuid")
    private String gradeUuid; 
}

简单介绍 Lombok 使用 @Tolerate 实现冲突兼容问题

Lombok 实验性注解之 @Tolerate
注解介绍

实现对冲突的兼容,官方解释:使任何方法或者构造函数让 lombok 假装它不存在,作用于方法上,没什么大用,可以配合 @Builder 使用

使用场景

使用 Lombok 能够减少程序员的重复工作提高工作效率,而 lombok 的注解基本是基于标准的(如,标准的 Builder 模式),而实际开发的时候有时候为了实现某些能力会对标准实现做一些变形,而这个时候 lombok 的标准实现就会无法满足需求

使用 @Builder 对一个 DTO 实现一个构造器,但是在做 Json 反序列化的时候发生错误,原因就是缺少无参公共的构造函数,而手动写一个无参构造函数的时候编译错误,就是和 @Builder 冲突,虽然标准的 @Builder 没法是需要私有化构造函数的,但是在某些场景下我们需要对这种标准变形,这个时候 lombok 提供了 @Tolerate 实现对冲突的兼容

实战演练
@Builder
public class 程熙媛 {
    @Tolerate
    public 程熙媛 () {}
}

以上为个人经验,希望能给大家一个参考

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2871字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中