开发者

如何解决@Data和@Builder的冲突问题

目录
  • 一、问题描述
  • 二、如何解决该问题
    • 方法1
    • 方法2
  • 总结

    一、问题描述

    当在一个实体类中加上了@Data和@Builder两个注解之后,创建该实体类的实例就无法使用无参构造方法来创建了(就是new Person()这个方法报异常)

    如下图:

    Person实体类:

    package com.muyichen.demo.builder;
    
    import lombok.Builder;
    impohttp://www.devze.comrt lombok.Data;
    
    import Java.util.Date;
    
    @Data
    www.devze.com@Builder
    pubhttp://www.devze.comlic class Person {
    
        private String name;
    
        private Integer age;
    
        private String gender;
    
        private Date birth;
    
    }

    异常:没有无参构造

    如何解决@Data和@Builder的冲突问题

    二、如何解决该问题

    方法1

    手动添加无参构造,使用@Tolerate注解

    package com.muyichen.demo.builder;
    
    import lombok.Builder;
    import lombok.Data;
    import lombok.experimental.Tolerate;
    
    import java.util.Date;
    
    @Data
    @Builder
    public class Person {
    
        private String name;
    
        private Integer age;
    
        private String gender;
    
        private Date birth;
    
        @Tolerate
        public Person() {
        }
    }

    这种解决办法是将无参构造与buider中构造函数的冲突做了兼容。

    方法2

    直接添加两个注解@AllArgsConstructor、@NoArgsConstructor

    package com.muyichen.demo.builder;
    
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    importSJxTQVVKLv lombok.NoArgsConstructor;
    
    import java.util.Date;
    
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public class Person {
    
        private String name;
    
        private Integer age;
    
        private String gender;
    
        private Date bir编程th;
    
    }

    我比较推荐使用这个方法,这个方法添加了无参构造和所有有参数构造,这样可以保证以后使用类型转换映射的时候不会出问题。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜