关于lombok中的Builder注解解析

文章最前: 我是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更加的安全。

             

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章