精华内容
下载资源
问答
  • lombok @Builder注解

    千次阅读 2019-04-10 20:19:23
    lombok @Builder注解 作用 @Builder public class Card { private int id; private String name; private boolean sex; } 使用: Card card = Card.builder().id(10).name("dasd").sex(true).build(); 优点 不...

    lombok @Builder注解

    作用

    @Builder
    public class Card {
        private int id;
        private String name;
        private boolean sex;
    }
    

    使用:

    Card card = Card.builder().id(10).name("dasd").sex(true).build();
    

    优点

    • 不需些太多的set方法来定义属性内容
    • 写法更优雅

    @Builder对类做了什么?

    我们可以反编译生成的 Card.class

    public class Card {
        private int id;
        private String name;
        private boolean sex;
    
        Card(int id, String name, boolean sex) {
            this.id = id;
            this.name = name;
            this.sex = sex;
        }
    
        public static Card.CardBuilder builder() {
            return new Card.CardBuilder();
        }
    
        public static class CardBuilder {
            private int id;
            private String name;
            private boolean sex;
    
            CardBuilder() {
            }
    
            public Card.CardBuilder id(int id) {
                this.id = id;
                return this;
            }
    
            public Card.CardBuilder name(String name) {
                this.name = name;
                return this;
            }
    
            public Card.CardBuilder sex(boolean sex) {
                this.sex = sex;
                return this;
            }
    
            public Card build() {
                return new Card(this.id, this.name, this.sex);
            }
    
            public String toString() {
                return "Card.CardBuilder(id=" + this.id + ", name=" + this.name + ", sex=" + this.sex + ")";
            }
        }
    }
    

    那么其实很明显了,注解在编译后使得Card类中多了一个名为Card.CardBuilder的静态内部类。这个静态类拥有和Card类相同的属性,并且他额外实现了一些方法:

    1.name、sex、id等的属性方法

    其实这些方法和setAttribute十分类似,只是额外返回了实例本身,这使得它可以使用类似于链式调用的写法。

    2.build方法

    该方法调用Card类的全参构造方法来生成Card实例。

    Card类还是实现了builder方法,这个方法生成一个空的Card.CardBuilder实例。

    缺点

    最明显的一点,在生成Card实例之前,实际上是先创建了一个Card.CardBuilder实例,这样很明显额外占用了内存。

    额外

    @Builder(toBuilder = true)

    这个选项允许你将一个实例化好的Card更新字段生成新的Card实例。

    public Card.CardBuilder toBuilder() {
        return (new Card.CardBuilder()).id(this.id).name(this.name).sex(this.sex);
    }
    

    可以清楚的看出来,toBuilder方法是用当前实例的属性构造了一个新的Builder实例。

    展开全文
  • Lombok中@Builder注解

    2019-12-25 20:01:42
    @Builder注解用了之后会 省略繁琐的 实例化对象 例如: @Data @Builder public class Student{ private String name; private Integer agge; } 没有加@Builder注解前: Student stu = new Student(); stu.setName...
    @Builder注解用了之后会 省略繁琐的 实例化对象

    例如:

    @Data
    @Builder
    public class Student{
    
    private String name;
    private Integer agge;
    
    }
    

    没有加@Builder注解前:

    Student stu = new Student();
    stu.setName("小明");
    stu.setAge(18);
    

    加@Builder注解之后

    Student stu = Student.toBuilder()
            .name("小红")
            .age(18)
            .build();
    

    问题来了,加上@Builder注解之后无法调用无参的构造方法了,需要在类中加上下面的注解和无参方法。

    
    
    
    @Data
    @Builder
    public class Student{
    
    	private String name;
    	private Integer agge;
    
    	@Tolerate
    	public Student() {
    	
    	}
    }
    	
    

    这样就好了。

    展开全文
  • lombok @Builder 注解使用

    2019-12-25 15:48:25
    @Builder: 被注解的类加个构造者模式 ...通过@Builder注解,lombok还可以方便的实现建造者模式。 参考文章链接 https://blog.csdn.net/weixin_41540822/article/details/86606562 作者:济空 ...

    @Builder : 被注解的类加个构造者模式

    通过@Builder注解,lombok还可以方便的实现建造者模式。

    参考文章链接

    https://blog.csdn.net/weixin_41540822/article/details/86606562

    作者:济空

    展开全文
  • 用了@builder注解感觉很神奇,所有就看了下Builder的实现; package com.example.demo.mapdemo; import lombok.Builder; import lombok.Data; /** * 使用builder注解 * * @author: zhangyu */ @Data @...

    文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

    相关文章:

    1. LeetCode:55. Jump Game(跳远比赛)
    2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
    3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

    用了@builder注解感觉很神奇,所有就看了下Builder的实现;

    package com.example.demo.mapdemo;
    
    
    import lombok.Builder;
    import lombok.Data;
    
    /**
     * 使用builder注解
     *
     * @author: zhangyu
     */
    @Data
    @Builder
    public class Person{
        int age;
        int grade;
        String name;
    }
    

    自己手动按照这个例子实现了一下Builder注解的作用。

    **
     * 实现builder注解的作用
     *
     * @author: zhangyu
     */
    
    public class Person {
        int age;
        int grade;
        String name;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public static class Builder {
            private String name;
            private int age;
            private int grade;
    
            public Builder(String name) {
                this.name = name;
            }
    
            public Builder age(int val) {
                age = val;
                return this;
            }
    
            public Builder grade(int val) {
                grade = val;
                return this;
            }
    
            public Person build() {
                return new Person(this);
            }
        }
    
        private Person(Builder builder) {
            age = builder.age;
            grade = builder.grade;
        }
    }
    

             这个是Builder的实现方式;它既能保证重叠构造器模式那样的安全性,也能保证像javabean模式那么好的可读性;不直接生成自己想要的对象,而是让builder对象上调用类似于setter方法,来设置每个相关的可选参数,最后,客户端调用无参数的build。

    Person person = Person.builder().age(22).name("zhangyu").grade(67).build(); System.out.println(person);

     这样的方式,易于阅读,builder模式模拟了具体名的可选参数,就行python一样;

          当时使用builder也有它自身的不足,为了创建对象,必须先构建它的构建器,如果再类的构造器或者静态工厂中有多个参数,设计这样类型时候,builder模型就是一个不错的选择,特别是当大多数参数是可选的,与使用传统的重叠结构构造器模式相比,使用builder模式的代码更容易阅读和编写;构造器也比javabeans更加的安全。

    展开全文
  • lombok 下的@Builder注解用法
  • lombok的Builder注解的坑

    2021-01-09 22:23:06
    只用Data注解是生成了默认构造器 用了Data和Builder注解,竟然吧默认构造器给弄没了,导致使用mybatis绑定值的时候,值的类型错位 解决办法就是把使用 @Data @NoArgsConstructor @AllArgsConstructor
  • Lombok的@Builder注解带来的两大坑

    千次阅读 2020-11-09 18:24:12
    文章目录1、@Data和@Builder导致无参构造丢失两种解决方法2、@Builder注解导致默认值无效分析原因 1、@Data和@Builder导致无参构造丢失 单独使用@Data注解,是会生成无参数构造方法。 单独使用@Builder注解,...
  • Lombok @Builder注解不能 build 父类属性

    万次阅读 2019-06-25 15:38:01
    问题描述如下: ...父类: 没有使用@Builder注解 子类:使用@Builder注解 在构建子类的时候,父类的属性不能被获取到 解决:查了一下,新版 Lombok 可以用@SuperBuilder解决,不过目前是属于实验版 ...
  • @Builder注解导致默认值无效 使用Lombok注解可以极高的简化代码量,比较好用的注解除了@Data之外,还有@Builder这个注解,它可以让你很方便的使用builder模式构建对象,但是今天发现@Builder注解会把对象的默认值...
  • @Builder注解会创建一个内部类,访问通过builder()。这个内部类使用一个fluent API 提供一种方便的方式去构造类。示例如下: import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder;...
  • 单独使用@Builder注解,生成全属性的构造方法,无无参构造方法。 @Data和@Builder一起用:没有了默认的构造方法。手动添加无参数构造方法或者用@NoArgsConstructor注解会报错 于是看了一下Lombok...
  • java lombok-@Builder 注解

    2020-03-13 17:34:18
    java lombok-@Builder 注解 一、前言 在写代码中javaBean要重复写get、set、toString方法是一个没有技术含量且重复工作量的事情,当javaBean类较多时候写着也很繁琐,lombok提供了注解方式,不需要再写这些重复的...
  • 在实际开发中,有时候需要对子类使用lombok的@Builder注解来使用builder模式构造该子类对象。 父类: import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @...
  • Java中lombok @Builder注解使用详解

    万次阅读 2019-06-04 01:34:07
    简介 Lombok大家都知道,在使用...除此之外,通过@Builder注解,lombok还可以方便的时间建造者模式。 只需要定义一个静态公共的内部类即可。代码示例如下: public class User { private Integer id; private St...
  • Lombok大家都知道,在使用POJO过程中,对于java对象的创建工作它可以更优雅,不需要...除此之外,通过@Builder注解,lombok还可以方便的时间建造者模式。 @Builder提供在设计数据实体时,对外保持private setter,...
  • 在面向对象的设计里,继承是非常必要的,我们会把...这主要是由于构造方法与父类冲突的问题导致的,事实上,我们可以把@Builder注解加到子类的全参构造方法上就可以了! 下面做一个Jpa实体的例子 一个基类 它一...
  • 关于Java中Lombok表达式@Builder注解的坑 @Builder语法 import lombok.Builder; import lombok.Data; @Builder @Data public class User{ //姓名 private String name; //年龄 private String age...
  • 通过在类上添加 lombok 的 @Builder 注解,使该类可以基于建造者模式进行对象的创建 如何使用 下面让我们进入正题(如何使用 @Builder 注解),首先需要保证您的项目中的 pom.xml 文件已引入了 lombok,如下: <...
  • 在使用lombok @Builder注解遇到的问题

    千次阅读 2019-06-24 15:54:25
    使用@Builder注解的时候可直接用对应类名点字段名最后.build() 这样构建出一个对应类的实例: import java.util.Date; import com.baomidou.mybatisplus.annotations.TableField; import ...
  • 实体类使用@lombok.Builder注解和自己手动编写的全参构造方法,构建实体类实例时部分字段值发生了错乱。 2.示例代码 /** * @ClassName Demo * @Description TODO * @Author Mr Zhang * @Date 2020/9/16 13:...
  • 问题:子类使用了builder注解,现在要同时对父类属性赋值,报错,无法解析。。。 过程:对于builder无法对父类属性赋值的问题的解决: 1.父类加上@AllArgsConstructor注解,标识一个全参构造函数,否则子类super没法...
  • 实体上使用了lombok的@Builder注解,如果不select所有字段,就会报错。 解决方法:使用lombok的@Builder注解的时候必须必须同时在pojo对象中使用注解@Tolerate添加一个无参构造。如下: package org.tangxz.modules....
  • 如果当前类继承了父类,Lombok的@builder注解获取不到父类属性。 子类User中使用@Setter、@Getter,并不能给父类UserBase.java中的属性id生成Setter、Getter 子类User中使用@Builder,也获取不到父类UserBase.java...
  • *lombok注解在java进行编译时进行代码的构建,对于java对象的创建工作它可以更优雅,不需要写多余的重复的代码, * 这对于JAVA开发人员是很重要的,在出现lombok之后,对象的创建工作更提供Builder方法,它提供在...
  • Lombok 的@Builder 注解在使用的,会覆盖model自己的无参数构造函数,导致...这个时候,假如你不小心,在对应的model里面使用了@Builder注解,那么,他的无参数构造函数就没了。 导致,在解析数据的时候,Spring...
  • Builder注解,为类提供构造函数,且让类的属性只能获取不能设置--等价于只有Getter注解的意思,如果在Builder注解增加toBuilder=true,又可以根据原对象的某些属性创建一个新对象。 2.以一个project进行说明。项目...
  • BUILDER(生成器)——对象创建型模式意图适用性Builder设计模式中涉及到的参与者最小结构的Builder模式代码范例-Java最小结构的Builder模式代码范例-C# 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建...
  • 实体上使用了lombok的@Builder注解,如果不select所有字段,就会报错。解决方法:使用lombok的@Builder注解的时候必须必须同时在pojo对象中使用注解@Tolerate添加一个无参构造。如下:package org.tangxz.modules....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 635
精华内容 254
关键字:

builder注解