Lombok中@Accessors注解的作用是什么

2023-05-26,

这篇文章将为大家详细讲解有关Lombok中@Accessors注解的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

@Accessors注解官方给出的解释是:面向getter和setter的更流畅的API。

实验性

官方给出实验(设计)原因是:

  • 希望将这些功能整合到更完整的属性支持概念中。

  • 新功能–需要社区反馈。

当前状态:中性-可能会有一些变化。这些更改旨在向后兼容,但应从实验功能开始:

  • 开放功能请求:以小写字母开头,后跟大写字母开头的属性的命名行为。一半的规范,工具和lombok用户更喜欢将名为uLimit的字段转换为getULimit(包括lombok),而另一半则更喜欢getuLimit。 @Accessors可能参与解决此请求的任何更新。

  • 开放功能请求:对命名访问者的更多控制;例如,解决以创意命名的布尔属性:将boolean wasRunning转换为boolean wasRunning()而不是boolean isWasRunning(),以及更广泛的前缀支持。如果解决了此功能请求,则将涉及@Accessors。

  • @Accessors当前不会从字段@Accessors批注“层叠”到类级别的@Accessors批注,但会将其“层叠”到lombok.config。更改此设置并不困难,但向后不兼容。不太可能破坏很多现有代码,但这需要在功能退出实验状态之前进行决定。

实验性

@Accessors批注用于配置lombok生成和查找getter和setter的方式。

默认情况下,lombok遵循针对getter和setter的bean规范:例如,名为Pepper的字段的getter是getPepper。但是,有些人可能希望打破bean规范,以得到更好看的API。 @Accessors允许您执行此操作。

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

因此@Accessors具有3个选项 :

  • fluent-- 一个布尔值。如果为true,则胡椒粉的吸气剂仅是Pepper(),而装填器的是Pepper(T newValue)。此外,除非指定,否则chain默认为true。 默认值:false。

  • chain--一个布尔值。如果为true,则生成的setter返回此值,而不是void。 默认值:false,除非fluent = true,否则默认值:true。

  • prefix--字符串列表。如果存在,则字段必须以这些前缀中的任何一个作为前缀。依次将每个字段名称与列表中的每个前缀进行比较,如果找到匹配项,则将前缀去掉以创建该字段的基本名称。在列表中包括一个始终匹配的空字符串是合法的。对于字母字符,前缀后面的字符不能为小写字母,即Pepper甚至不能与前缀p匹配,但pEpper可以匹配(并且意味着该字段的基本名称是epper)。

@Accessors注释在类型和字段上合法;如果存在,则适用的注释是该字段上的注释,否则为该类上的注释。当在字段上存在@Accessors批注时,即使在字段@Accessors上未配置的属性,也将忽略该字段所在的类中也存在的任何@Accessors批注。这与任何lombok.config配置键相反,如果未指定任何显式@Accessors批注,这些配置键将作为后备默认值。

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!";
}
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;
  }
}
支持的配置键:
lombok.accessors.chain = [true | false] (default: false)

如果设置为true,则任何没有@Accessors批注或没有@Accessors批注但该批注不具有chain参数的显式值的类,都将像出现@Accessors(chain = true)一样起作用。

lombok.accessors.fluent = [true | false] (default: false)

如果设置为true,则任何没有@Accessors批注或没有@Accessors批注但该批注没有fluent参数的显式值的类都将像@Accessors(fluent = true)一样存在。

lombok.accessors.prefix += a field prefix (default: empty list)

这是一个列表属性;可以使用+ =运算符添加条目。可以使用-=运算符删除从父配置文件继承的前缀。任何没有或没有@Accessors批注的类都可以,就好像存在@Accessors(prefix = {在配置中列出的前缀})一样。 

lombok.accessors.flagUsage = [warning | error] (default: not set)

如果已配置,Lombok会将@Accessors的任何用法标记为警告或错误。

小提示:

最近的@Accessors 注解还用于lombok中用于各种寻找类的getter方法,例如@EqualsAndHashCode。

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

关于Lombok中@Accessors注解的作用是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

《Lombok中@Accessors注解的作用是什么.doc》

下载本文的Word格式文档,以方便收藏与打印。