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

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

279次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7805784
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...