Java如何在Lombok的@Getter和@Setter注解中定义访问修饰符?

默认情况下,当我们使用Lombok@Getter和@Setter注解时,将使用publicaccess修饰符创建getter和setter 。但是,我们可以通过设置改变访问修饰符AccessLevel的@Getter和@Setter注释。对于访问级别可用的选项有AccessLevel.PUBLIC,AccessLevel.PROTECTED,AccessLevel.PACKAGE,AccessLevel.PRIVATE。这些枚举值对应于Java的access修饰符。而AccessLevel.NONE会禁用getter和setter方法的生成。

package org.nhooo.example.lombok.domain;

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

@Getter @Setter
public class Person {
    @Setter(AccessLevel.PROTECTED)
    private String firstName;

    private String lastName;
    private String gender;

    @Getter(AccessLevel.PRIVATE)
    private int age;
}

我们如何使用Person以下代码段中的类显示:

package org.nhooo.example.lombok;

import org.nhooo.example.lombok.domain.Person;

public class PersonDemo {
    public static void main(String[] args) {
        Person person = new Person();
        person.setLastName("Bar");
        person.setGender("M");
        person.setAge(20);

        System.out.println(person.getFirstName());
        System.out.println(person.getLastName());
        System.out.println(person.getGender());
    }
}

如果尝试查看该类的生成类,则Person可以运行以下命令来反汇编该类。

javap -p -cp . org.nhooo.example.lombok.domain.Person

并且我们获得了以下javap命令输出。如我们所见,该setFirstName()方法具有protected访问修饰符,并且该getAge()方法具有private访问修饰符。另一个mutator和accessor方法都设置为public访问修饰符。

public class org.nhooo.example.lombok.domain.Person {
  private java.lang.String firstName;
  private java.lang.String lastName;
  private java.lang.String gender;
  private int age;
  public org.nhooo.example.lombok.domain.Person();
  public java.lang.String getFirstName();
  public java.lang.String getLastName();
  public java.lang.String getGender();
  public void setLastName(java.lang.String);
  public void setGender(java.lang.String);
  public void setAge(int);
  protected void setFirstName(java.lang.String);
  private int getAge();
}

Maven依赖

<!--https://search.maven.org/remotecontent?filepath=org/projectlombok/lombok/1.18.4/lombok-1.18.4.jar-->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.4</version>
</dependency>

Maven中央