@Accessors


获取企业版 Lombok

@Accessors

用于 getter 和 setter 的更流畅的 API。

@Accessors在 lombok v0.11.0 中作为实验功能引入。

Experimental

实验性的,因为:
  • 我们可能希望将这些功能整合到更完整的属性支持概念中。
  • 新功能 - 请求社区反馈。
当前状态:中性- 预计会有一些变化。这些更改旨在向后兼容,但应从实验功能开始:
  • 打开功能请求:以小写字母后跟大写字母开头的属性的命名行为。一半的规范、工具和 lombok 用户更喜欢名为uLimitinto getULimit(包括 lombok)的字段,而另一半则更喜欢getuLimit. @Accessors可能涉及解决此请求的任何更新。
  • 开放功能请求:对命名访问器的更多控制;例如解决创造性命名的布尔属性:boolean wasRunning变成boolean wasRunning()而不是boolean isWasRunning(),以及更广泛的前缀支持。@Accessors如果此功能请求得到解决,将涉及。
  • @Accessors目前没有从字段@Accessors注释“级联”到类级@Accessors注释,但它确实“级联”到lombok.config. 改变这一点并不困难,但向后不兼容。它不太可能破坏很多现有代码,但这需要在功能退出实验状态之前做出决定。

Overview

@Accessors注解用于配置 lombok 如何生成和查找 getter 和 setter

默认情况下,lombok 遵循getter 和 setter的bean 规范pepper:例如,字段名称的getter getPepper然而,有些人可能想打破bean 规范,以便最终得到更好看的 API。@Accessors让你这样做。

一些程序员喜欢在他们的字段中使用前缀,即他们写fPepper而不是pepper. 我们强烈反对这样做,因为您无法对前缀的有效性进行单元测试,并且重构脚本可能会将字段转换为局部变量或方法名称。此外,如果您希望此信息立即可见,您的工具(例如您的编辑器)可以以某种方式呈现标识符。不过,您也可以列出项目使用的前缀 via @Accessors

@Accessors因此有 3 个选项:

  • fluent– 一个布尔值。如果为true,则 getter 为pepperjust pepper(),而 setter 为pepper(T newValue)此外,除非指定,否则chain默认为true
    默认值:
  • chain– 一个布尔值。如果为true,则生成的 setter 返回this而不是void
    默认值:false,除非fluent=true,然后默认值:true
  • prefix– 字符串列表。如果存在,字段必须以这些前缀中的任何一个作为前缀。依次将每个字段名称与列表中的每个前缀进行比较,如果找到匹配项,则去除前缀以创建字段的基本名称。在列表中包含一个空字符串是合法的,它将始终匹配。对于字母字符,前缀后面的字符不能是小写字母,即pepper即使与 prefix 也不匹配p,但pEpper会匹配(并且意味着该字段的基本名称是epper)。

@Accessors注解在类型和字段上是合法的如果存在,则应用的注释是字段上的注释,否则是类上的注释。@Accessors字段上的注释存在时,该字段所在的类上也存在的任何@Accessors注释都将被完全忽略,即使对于未在该字段上配置的属性也是如此@Accessors这与在未指定任何显式注释 lombok.config时用作回退默认值的任何配置键形成对比。@Accessors

With Lombok

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!";
}
 

Vanilla 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;
  }
}

Supported configuration keys:

lombok.accessors.chain= [ true| false](默认值:假)
如果设置为true,则任何没有@Accessors注解或有注解但该注解没有chain参数的显式值的类都将表现得好像@Accessors(chain = true)存在一样。
lombok.accessors.fluent= [ true| false](默认值:假)
如果设置为true,则任何没有@Accessors注解或有注解但该注解没有fluent参数的显式值的类都将表现得好像@Accessors(fluent = true)存在一样。
lombok.accessors.prefix+=字段前缀(默认:空列表)
这是一个列表属性;可以使用+=运算符添加条目。可以使用-=操作符删除从父配置文件继承的前缀。任何没有@Accessors注释的类,或者有注释但该注释没有prefix参数的显式值的任何类都将表现得好像存在一样。 @Accessors(prefix = {prefixes listed in configuration})
lombok.accessors.flagUsage= [ warning| error](默认:未设置)
如果配置,Lombok 会将任何使用标记@Accessors为警告或错误。

Small print

最近的@Accessors注解也用于 lombok 中查找 getter 的各种方法,例如@EqualsAndHashCode.

如果提供了前缀列表并且某个字段不是以其中一个开头,则 lombok 会完全跳过该字段,并会生成警告。