美文网首页
@Getter and @Setter

@Getter and @Setter

作者: eagle_king | 来源:发表于2019-01-13 15:10 被阅读0次

@Getter and @Setter

永远不要再写public int getFoo() {return foo;}了。

Overview

您可以使用@Getter和/或@Setter注释任何字段,让lombok自动生成默认的getter / setter。
默认的getter只返回该字段,如果该字段是foo(或者isFoo字段的类型是boolean),则命名为getFoo。如果字段被是foo,默认的setter命名为setFoo且返回一个 void,并接收1个与该字段相同类型的参数。它只是将字段设置为此值。

生成的getter / setter方法将是public除非您明确指定AccessLevel,如下面的示例所示。逻辑访问级别PUBLICPROTECTEDPACKAGE,和PRIVATE

您还可以在类上放置@Getter和/或@Setter注释。在这种情况下,就像注释该类中的所有非静态字段一样。

您始终可以使用特殊AccessLevel.NONE访问级别手动禁用任何字段的getter / setter生成。这使您可以重写的行为@Getter@Setter@Data对类注解。

要在生成的方法上添加注释,您可以使用onMethod=@__({@AnnotationsHere}); 要将注释放在生成的setter方法的唯一参数上,您可以使用onParam=@__({@AnnotationsHere})。但要小心!这是一个实验性功能。有关更多详细信息,请参阅有关onX功能的文档。

lombok v1.12.0中的新功能:现在将字段上的javadoc复制到生成的getter和setter。通常情况下,所有的文本被复制,且@return移动到getter,而@param移动到setter。移动意味着:从字段的javadoc中删除。也可以为每个getter / setter定义唯一的文本。为此,您可以创建一个名为GETTER和/或的“部分” SETTER。一个部分是你的javadoc中包含2个或更多短划线的行,然后是文本'GETTER'或'SETTER',后面是2个或更多的破折号,行上没有其他内容。如果您使用的部分,@return@param剥离该部分不再做(移动@return@param进线部分)。

With Lombok

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

public class GetterSetterExample {
  /**
   * Age of the person. Water is wet.
   * 
   * @param age New value for this person's age. Sky is blue.
   * @return The current value of this person's age. Circles are round.
   */
  @Getter @Setter private int age = 10;
  
  /**
   * Name of the person.
   * -- SETTER --
   * Changes the name of this person.
   * 
   * @param name The new value.
   */
  @Setter(AccessLevel.PROTECTED) private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
}

Vanilla Java

public class GetterSetterExample {
  /**
   * Age of the person. Water is wet.
   */
  private int age = 10;

  /**
   * Name of the person.
   */
  private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
  
  /**
   * Age of the person. Water is wet.
   *
   * @return The current value of this person's age. Circles are round.
   */
  public int getAge() {
    return age;
  }
  
  /**
   * Age of the person. Water is wet.
   *
   * @param age New value for this person's age. Sky is blue.
   */
  public void setAge(int age) {
    this.age = age;
  }
  
  /**
   * Changes the name of this person.
   *
   * @param name The new value.
   */
  protected void setName(String name) {
    this.name = name;
  }
}

Supported configuration keys:

lombok.accessors.chain = [true | false] (default: false)
如果设置为true,则生成的setter将返回this(而不是void)。显式配置chain@Accessors注释参数优先于此设置。
lombok.accessors.fluent = [true | false] (default: false)
如果设置为true,生成的getter和setter将不会以bean标准为前缀getisset; 相反,这些方法将使用与字段相同的名称(减去前缀)。显式配置chain@Accessors注释参数优先于此设置。
lombok.accessors.prefix += a field prefix (default: empty list)
这是一个列表属性; 条目可以与+=操作符一起添加。可以使用-=运算符删除父配置文件中的继承前缀。Lombok将从字段名称中删除任何匹配的字段前缀,以确定要生成的getter / setter的名称。例如,如果m在此设置中列出的前缀之一,那么一个名为场mFoobar将导致一个名为吸气getFoobar(),没有getMFoobar()。显式配置prefix@Accessors注释参数优先于此设置。
lombok.getter.noIsPrefix = [true | false] (default: false)
如果设置为true,则为boolean字段生成的getter 将使用get前缀而不是默认is前缀,并且任何生成的调用getter的代码(例如)@ToString也将使用get而不是is
lombok.setter.flagUsage = [warning | error] (default: not set)
如果配置, Lombok会将任何@Setter用法标记为警告或错误。
lombok.getter.flagUsage = [warning | error] (default: not set)
如果配置, Lombok会将任何@Getter用法标记为警告或错误。
lombok.copyableAnnotations = [A list of fully qualified types] (default: empty list)
Lombok会将任何这些注释从字段复制到setter参数和getter方法。请注意,lombok附带了一堆“开箱即用”的注释,这些注释已知是可复制的:所有流行的可空/非空注释。

Small print

为了生成方法名称,字段的第一个字符(如果是小写字符)是标题字符,否则,它保持不变。然后,get / set /是前缀。

如果已存在具有相同名称(不区分大小写)和相同参数计数的任何方法,则不会生成任何方法。例如,即使在技术上可以制作方法,getFoo()如果已经有方法getFoo(String... x)也不会生成。这个警告是为了防止混淆。如果由于这个原因跳过了方法的生成,则会发出警告。Varargs计为0到N个参数。你可以标记任何方法@lombok.experimental.Tolerate来隐藏它们从lombok。

对于booleanis紧跟着标题大小写字母开头的字段,不会生成任何前缀以生成getter名称。

任何变化boolean不会导致使用is前缀而不是get前缀; 例如,返回java.lang.Boolean的结果get前缀,而不是一个is前缀。

来自流行库的许多注释表示非空性,例如javax.annotation.Nonnull,如果存在于字段上,则导致生成的setter中的显式空检查。

关于可空性的各种众所周知的注释(例如org.eclipse.jdt.annotation.NonNull)会自动复制到正确的位置(getter的方法,setter的参数)。您可以指定应始终通过lombok 配置密钥 复制的其他注释lombok.copyableAnnotations

您可以使用@Getter@Setter注释来注释类。这样做等同于使用该批注对该类中的所有非静态字段进行批注。字段上的@Getter/ @Setter注释优先于类上的注释。

使用AccessLevel.NONE访问级别根本不生成任何内容。它是有用的,只有结合@Data或类范围@Getter@Setter

@Getter也可用于枚举。@Setter不能,不是出于技术原因,而是出于务实的原因:在枚举上setter是一个非常糟糕的主意。

相关文章

网友评论

      本文标题:@Getter and @Setter

      本文链接:https://www.haomeiwen.com/subject/xotldqtx.html