Lombok使用@Tolerate实现冲突兼容问题

作者:刹那的娜娜 时间:2021-06-27 06:50:55 

使用@Tolerate实现冲突兼容

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

例如,这样一个场景

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

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

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

/**
* <p>
* 包括能力、知识点等
* </p>
*
* @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 程熙媛() {}
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

来源:https://blog.csdn.net/qq_41536778/article/details/113374213

标签:Lombok,@Tolerate,冲突兼容
0
投稿

猜你喜欢

  • Android中AlertDilog显示简单和复杂列表的方法

    2022-11-22 16:32:35
  • C#实现视频的批量剪辑功能

    2023-07-15 06:18:30
  • Spring如何使用@Indexed加快启动速度

    2022-05-02 10:50:40
  • Netty分布式从recycler对象回收站获取对象过程剖析

    2021-08-12 06:45:48
  • C#启动进程的几种常用方法

    2023-06-18 04:13:48
  • Springboot项目打war包docker包找不到resource下静态资源的解决方案

    2022-01-01 07:03:55
  • Java继承方法重写实现原理及解析

    2021-12-31 16:35:54
  • RocketMQ事务消息保证消息的可靠性和一致性

    2022-09-05 00:25:26
  • java中类加载与双亲委派机制详解

    2023-12-07 06:34:53
  • java8新特性将List中按指定属性排序过滤重复数据的方法

    2023-06-16 17:57:42
  • Springboot中加入druid连接池

    2023-08-08 05:47:22
  • JAVA包装类及自动封包解包实例代码

    2022-10-23 13:28:54
  • android 获取视频第一帧作为缩略图的方法

    2022-11-22 19:30:25
  • 详解C语言实现猜数字游戏

    2023-11-03 04:58:51
  • Android PullToRefreshLayout下拉刷新控件的终结者

    2021-06-22 02:15:00
  • SpringBoot @Scope与@RefreshScope注解使用详解

    2022-11-13 17:52:44
  • WinForm实现的图片拖拽与缩放功能示例

    2021-06-18 09:17:26
  • java基本教程之synchronized关键字 java多线程教程

    2023-02-20 04:11:17
  • java线程之join方法的使用介绍

    2023-01-15 12:18:40
  • Java编程实现月食简单代码分享

    2022-12-27 12:33:24
  • asp之家 软件编程 m.aspxhome.com