@Accessors 的三种用法的解释

@Accessors

@Accessors: 用于配置getter和setter方法的生成结果,下面介绍三个属性

fluent

默认为false。若设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。

@Data
@Accessors(fluent = true)
public class User {
    private Long id;
    private String name;
    
    // 生成的getter和setter方法如下,方法体略
    public Long id() {}
    public User id(Long id) {}
    public String name() {}
    public User name(String name) {}
}

chain

默认为false。若设置为true,则setter方法返回当前对象。

@Data
@Accessors(chain = true)
public class User {
    private Long id;
    private String name;
    
    // 生成的setter方法如下,方法体略
    public User setId(Long id) {}
    public User setName(String name) {}
}

prefix

用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。

@Data
@Accessors(prefix = "p")
class User {
  private Long pId;
  private String pName;
  
  // 生成的getter和setter方法如下,方法体略
  public Long getId() {}
  public void setId(Long id) {}
  public String getName() {}
  public void setName(String name) {}
}

@Builder

package com.xing.model;

import lombok.Builder;
import lombok.Data;
import lombok.Singular;

import java.util.List;

@Data
@Builder
public class Person {
    private String name;
    @Builder.Default  // 默认值:北京
    private String city = "北京";

    @Singular  // 识别单词的复数
    private List<String> interests;
    @Singular("tag")  // 不能使用识别复数的,需要用别名,否则会报错
    private List<String> tagList;
}

class test {
    public static void main(String[] args) {
        Person person = Person.builder()
                .name("张三")
                .interest("1").interest("2")
                .tag("sign 1").tag("sign 2")
                .build();
        System.out.println(person);
    }
}

运行结果:
Person(name=张三, city=北京, interests=[1, 2], tagList=[sign 1, sign 2])

posted @ 2023-09-08 15:16  笔兴洽谈室  阅读(227)  评论(0编辑  收藏  举报