Skip to content

[toc]

一、@Getter and @Setter

取代实体类中的get和set方法

使用@Getter或@Setter,lombok会自动生成默认的getter / setter。如果在类上使用,则所有字段生成getter / setter

二、@Accessors

目的是修改getter和setter方法的内容

  • fluent

    如果为true,那么getter 和setter 生成的方法名没有前缀。此外,除非指定,否则chain将为true。

  • chain

    如果为true,则生成的setter返回this而不是void。默认值:false

  • prefix

    如果存在,则字段必须以任何这些前缀为前缀。每个字段名称依次与列表中的每个前缀进行比较,如果找到匹配项,则会剥离前缀以创建字段的基本名称。在列表中包含一个空字符串是合法的它将始终匹配。

示例:

java
import lombok.experimental.Accessors;
import lombok.Getter;
import lombok.Setter;

@Accessors(fluent = true)
public class AccessorsExample {
  @Getter @Setter
  private int age = 10;
}

class PrefixExample {
  @Accessors(prefix = "f") @Getter
  private String fName = "Hello, World!";
}

等价于:

java
 public class AccessorsExample {
  private int age = 10;
  
  public int age() {
    return this.age;
  }
  
  public AccessorsExample age(final int age) {
    this.age = age;
    return this;
  }
}

class PrefixExample {
  private String fName = "Hello, World!";
  
  public String getName() {
    return this.fName;
  }
}

三、@AllArgsConstructor,RequiredArgsConstructor和@NoArgsConstructor

分别生成:全参构造方法,带参构造,无参构造

四、@ToString和@EqualsAndHashCode

自动重写toString\equals\hashCode方法

五、@Data

集成以下注解

  • @Getter
  • @Setter
  • @RequiredArgsConstructor
  • @ToString
  • @EqualsAndHashCode

独有属性配置:

  • staticConstructor 静态方法名

@Data(staticConstructor=“of”) 通过新的方式来创建实例:Foo.of(5)

六、@Value

@Value是不可变的@Data

@ToString,@EqualsAndHashCode,@AllArgsConstructor,@FieldDefaults,@Getter。

所有字段由private和final修饰,不会产生setter方法。类本身也是由final修饰。

七、@Builder和@Singular

自动生成构造者模式代码,Singular是针对集合属性的特殊处理。

7.1 @Singular

@Singular对集合进行操作,最终会生成不可变集合

示例:

java
public class Person {
    @Singular 
    private List<String> names;
}

//-------------生成的方法
name(String) 添加一个姓名
clearNames() 清除
names(Collection<String>) 设置一个集合

使用:

java
Person.builder().name("小明").name("小红").build()

7.2 @Builder

通过内部类和一个全参构造器来实现构造者模式

示例:

java
@Builder
public class BuilderExample {
  @Builder.Default 
  private long created = System.currentTimeMillis();
  private String name;
  private int age;
  @Singular 
  private Set<String> occupations;
}

使用:

java
Person.builder().name("Adam Savage")
.city("San Francisco").job("Mythbusters")
.job("Unchained Reaction").build();

注意事项

  • 由于Builder会生成一个全参构造器,导致默认的无参构造器失效,所以类采用@Builder注解后无法new出来。

完整使用:

java
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person{}