共计 2871 个字符,预计需要花费 8 分钟才能阅读完成。
导读 | 这篇文章主要介绍了 Lombok 使用 @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 假装它不存在,作用于方法上,没什么大用,可以配合 @Builder 使用
使用 Lombok 能够减少程序员的重复工作提高工作效率,而 lombok 的注解基本是基于标准的(如,标准的 Builder 模式),而实际开发的时候有时候为了实现某些能力会对标准实现做一些变形,而这个时候 lombok 的标准实现就会无法满足需求
使用 @Builder 对一个 DTO 实现一个构造器,但是在做 Json 反序列化的时候发生错误,原因就是缺少无参公共的构造函数,而手动写一个无参构造函数的时候编译错误,就是和 @Builder 冲突,虽然标准的 @Builder 没法是需要私有化构造函数的,但是在某些场景下我们需要对这种标准变形,这个时候 lombok 提供了 @Tolerate 实现对冲突的兼容
public class 程熙媛 { | |
public 程熙媛 () {} | |
} |
以上为个人经验,希望能给大家一个参考
