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

目录
  • 使用@Tolerate实现冲突兼容
    • 例如,这样一个场景
  • Lombok实验性注解之@Tolerate
    • 注解介绍
    • 使用场景
    • 实战演练

使用@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 假装它不存在,作用于方法上,没什么大用,可以配合 @Builder 使用

使用场景

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

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

实战演练

@Builder
public class 程熙媛 {
    @Tolerate
    public 程熙媛() {}
}

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

(0)

相关推荐

  • 提升java开发效率工具lombok使用争议

    目录 引言 什么是 lombok 如何使用 lombok 的原理和滥用 引言 对使用 lombok 还是有很多争议的,有些公司不建议使用,有些公司又大量使用. 我们的想法是:可以使用,但是不要滥用. 什么是 lombok Lombok是 一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO) . 它通过注释实现这一目的. 通过在开发环境中实现Lombok,开发人员可以节省构建诸如hashCode() 和 equals()这样的方法以及以往用来分

  • Lombok插件有望被Intellij IDEA收编以改善兼容性问题(推荐)

    1. 前言 最近两个版本的Intellij IDEA没有办法使用lombok插件了,这种问题已经出现了多次,导致胖哥依然使用2020.1的旧版本.其实很多人和我一样也回滚到了旧版本.我一直认为是lombok插件作者没有及时跟进的问题,事实上我错怪作者了. 2. lombok失效的原因 当我尝试向lombok作者寻求答案时被告知"it's jetbrain's fault and not my fault.",他表示他也很冤枉,他早在两周前就已经同IDEA官方进行了沟通并寻求问题的解决方

  • 解决IDEA2020.1版本不兼容Lombok的问题

    Lombok不兼容: 问题:Plugin Error: Plugin "Lombok" is incompatible 解决办法: 1.进入Lombok官网插件地址下载0.29-EAP版本 2.打开Settings -->Plugins 3.选择刚刚下载好的zip包 4.重启IDEA就搞定啦 IDEA2020.1更新了什么? 到此这篇关于解决IDEA2020.1版本不兼容Lombok的问题的文章就介绍到这了,更多相关IDEA2020.1不兼容Lombok内容请搜索我们以前的文章或

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

    目录 使用@Tolerate实现冲突兼容 例如,这样一个场景 Lombok实验性注解之@Tolerate 注解介绍 使用场景 实战演练 使用@Tolerate实现冲突兼容 使用Lombok能够减少程序员的重复工作提高工作效率,而Lombok的注解基本是基于标准的(如,标准的Builder模式),而实际开发的时候有时候为了实现某些能力会对标准实现做一些变形,而这个时候Lombok的标准实现就会无法满足需求. 例如,这样一个场景 使用@Builder对一个DTO实现一个构造器,但是在做Json反序列

  • Mysql数据库锁定机制详细介绍

    前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一.本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析. MySQL锁定机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外.MyS

  • 你需要理解的关于MySQL的锁知识

    一.前言 MySQL 的锁按照范围可以分为全局锁.表锁.行锁,其中行锁是由数据库引擎实现的,并不是所有的引擎都提供行锁,MyISAM 就不支持行锁,所以文章介绍行锁会以InnoDB引擎为例来介绍行锁. 二.全局锁 MySQL 提供全局锁来对整个数据库实例加锁. 语法: FLUSH TABLES WITH READ LOCK 这条语句一般都是用来备份的,当执行这条语句后,数据库所有打开的表都会被关闭,并且使用全局读锁锁定数据库的所有表,同时,其他线程的更新语句(增删改),数据定义语句(建表,修改表

  • 开发人员为什么必须要了解数据库锁详解

    1.锁? 1.1何为锁 锁在现实中的意义为:封闭的器物,以钥匙或暗码开启.在计算机中的锁一般用来管理对共享资源的并发访问,比如我们java同学熟悉的Lock,synchronized等都是我们常见的锁.当然在我们的数据库中也有锁用来控制资源的并发访问,这也是数据库和文件系统的区别之一. 1.2为什么要懂数据库锁? 通常来说对于一般的开发人员,在使用数据库的时候一般懂点DQL(select),DML(insert,update,delete)就够了. 小明是一个刚刚毕业在互联网公司工作的Java开

  • MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解

    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源.如何保证数据并发访问的一致性.有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素.从这一角度来说,锁对于数据库而言就显得尤为重要. MySQL锁 相对于其他的数据库而言,MySQL的锁机制比较简单,最显著的特点就是不同的存储引擎支持不

  • 详解mysql 中的锁结构

    Mysql 支持3中锁结构 表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低 行级锁,开销小,加锁慢,会出现死锁,锁定粒度小,冲突概率最低,并发度最高 页面锁,开销和加锁处于表锁和行锁之间,会出现死锁,锁粒度基于表和行之间,并发一般 InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.  行级锁和表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题. InnoDB的行锁模式及加锁方法 Inn

  • java8 如何实现分组计算数量和计算总数

    java8分组计算数量和计算总数 package com.pig4cloud.pigx.admin.api.vo; import lombok.Builder; import lombok.Data; import lombok.experimental.Tolerate; import java.util.*; import java.util.stream.Collectors; /*** * *Create by 范春宇 on 2019/12/26 17:22 */ @Data publi

  • Java面试题冲刺第十二天--数据库(2)

    目录 面试题2:并发场景下事务会存在哪些数据问题? 正经回答: 深入追问: 追问1:那Innodb是如何解决幻读问题的呢? 面试题3:说一下MySQL中你都知道哪些锁? 正经回答: 深入追问: 追问1:那你来谈一谈你对表锁.行锁的理解吧. 追问2:那全局锁是什么时候用的呢? 追问2:那你再说一下按锁级别划分的那几种锁的使用场景和理解吧? 总结 面试题1:先说一下什么是MySQL事务吧 正经回答: 简单说,事务就是一组原子性的SQL执行单元.如果数据库引擎能够成功地对数据库应 用该组査询的全部语句

  • asp.net开发与web标准的冲突问题的一些常见解决方法

    论坛中也经常有从事.net开发的新手朋友问一些asp.net开发过程中与web标准之间的冲突问题,其实说到底就是客户端代码生成的问题.更高深的开发层面的东西我也说不出来,从页面前端的角度和大家分享一下建议: 少用asp.net中的服务器端控件 在Visual Studio中,有一系列强大的控件,让我们的刚开始学习.net开发人员爱不释手.但vs中的这些控件,大多都是基于winForm的那种模式搬来的,在网页开发上,有些控件还是少用为佳,比如: 不要什么也没都统统加form runat="serv

随机推荐