@Getter
和 @Setter
是两个常用的 Lombok 注解,它们用于自动生成 Java 类中属性字段的 getter 和 setter 方法。
Lombok 使用 Java 的注解处理器(Annotation Processor)来在编译时生成 getter 和 setter 方法的代码。当你使用 @Getter
或 @Setter
注解标记字段或类时,Lombok 的注解处理器会扫描这些注解,并自动生成相应的 getter 和 setter 方法的代码。
@Getter 注解
@Getter
是 Lombok 提供的注解之一,用于自动生成类的 getter 方法。
源码如下:
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Getter {
lombok.AccessLevel value() default lombok.AccessLevel.PUBLIC;
AnyAnnotation[] onMethod() default {};
boolean lazy() default false;
}
作用
它主要有两方面的作用:
- 自动生成属性的公共 getter 方法,允许访问类的成员变量。
- 减少手动编写 getter 方法的工作,提高代码可读性和可维护性。
注解属性
@Getter
注解本身具有一些属性,允许你自定义生成的 getter 方法的行为。这些属性可以在注解中设置,以满足特定需求。
以下是 @Getter
注解的自身属性:
value
属性(默认为AccessLevel.PUBLIC
):用于指定生成的 getter 方法的访问级别。可以采用AccessLevel
枚举中的值,包括PUBLIC
、PROTECTED
、PACKAGE
、PRIVATE
等。默认情况下,生成的 getter 方法是公共的。lazy
属性(默认为false
):如果设置为true
,则生成的 getter 方法将采用懒加载策略。这意味着只有在第一次访问属性时才会初始化它,并且之后的访问会返回已初始化的值。这对于计算成本较高的属性或需要延迟初始化的属性很有用。onMethod
属性(默认为空字符串):用于指定生成的 getter 方法的名称。如果不指定此属性,Lombok 会根据字段名生成默认的 getter 方法名。但如果你想要自定义 getter 方法的名称,可以使用此属性。
通过使用这些属性,你可以更精确地控制生成的 getter 方法的行为,使其适应不同的需求和代码风格。注意,在使用这些属性时,你可以根据需要灵活地定制 getter 方法的访问级别、懒加载行为以及方法的名称。
用法
@Getter
注解从源码可以看出,其可以作用在字段/属性或类型上。
用于字段上的 @Getter
注解:
import lombok.Getter;
public class Person {
@Getter
private String name;
@Getter
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
在这个示例中,@Getter
注解被用于字段 name
和 age
上,这将自动生成对应的 getName()
和 getAge()
方法。
用于类上的 @Getter
注解:
import lombok.Getter;
@Getter
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
在这个示例中,@Getter
注解被用于 Persion
类上,这将对 Person
类的所有属性都自动生成对应的 getter 方法。
@Setter 注解
@Setter
是 Lombok 提供的注解之一,用于自动生成类的 setter 方法。
源码如下:
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Setter {
lombok.AccessLevel value() default lombok.AccessLevel.PUBLIC;
AnyAnnotation[] onMethod() default {};
AnyAnnotation[] onParam() default {};
}
作用
它主要有两方面的作用:
- 自动生成属性的公共 setter 方法,允许设置类的成员变量。
- 减少手动编写 setter 方法的工作,提高代码可读性和可维护性。
注解属性
@Setter
注解本身具有一些属性,允许你自定义生成的 setter 方法的行为。这些属性可以在注解中设置,以满足特定需求。
以下是 @Setter
注解的自身属性:
value
属性(默认为AccessLevel.PUBLIC
):用于指定生成的 setter 方法的访问级别。可以采用AccessLevel
枚举中的值,包括PUBLIC
、PROTECTED
、PACKAGE
、PRIVATE
等。默认情况下,生成的 setter 方法是公共的。onParam
属性(默认为空字符串):用于指定生成的 setter 方法的参数名称。默认情况下,Lombok 将使用属性名称作为 setter 方法的参数名称,但如果你想要自定义参数名称,可以使用此属性。onMethod
属性(默认为空字符串):用于指定生成的 setter 方法的名称。如果不指定此属性,Lombok 会根据字段名生成默认的 setter 方法名。但如果你想要自定义 setter 方法的名称,可以使用此属性。
通过使用这些属性,你可以更精确地控制生成的 setter 方法的行为,使其适应不同的需求和代码风格。你可以自定义 setter 方法的访问级别、参数名称以及方法的名称。这样可以灵活地适应各种情况,同时减少手动编写 setter 方法的工作。
用法
@Setter
注解从源码可以看出,其可以作用在字段/属性或类型上。
用于字段上的 @Setter
注解:
import lombok.Setter;
public class Person {
@Setter
private String name;
@Setter
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
在这个示例中,@Setter
注解被用于字段 name
和 age
上,这将自动生成对应的 setName(String name)
和 setAge(int age)
方法。
用于类上的 @Setter
注解:
import lombok.Setter;
@Setter
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
在这个示例中,@Setter
注解被用于 Persion
类上,这将对 Person
类的所有属性都自动生成对应的 setter 方法。
总结
总之,@Getter
和 @Setter
注解是 Lombok 提供的方便工具,它们简化了 Java 类的 getter 和 setter 方法的编写,提高了代码的可读性和可维护性。通过在类和字段上使用这些注解,可以减少样板代码,使代码更加简洁。不过要确保在项目中使用 Lombok 之前,你的开发环境已经正确配置了 Lombok 插件,以便让注解处理器生效。