@Accessors
是一个注解,通常出现在 Lombok 库中,用于控制类中字段的 getter 和 setter 方法的生成行为。Lombok 是一个 Java 库,通过注解自动生成常见的代码(如 getter、setter、构造函数等),从而减少样板代码的编写。
@Accessors
的作用
@Accessors
注解主要用于配置生成的 getter 和 setter 方法的命名风格和行为。它有以下常用属性:
-
chain
:-
类型:
boolean
-
默认值:
false
-
作用:如果设置为
true
,生成的 setter 方法会返回当前对象(即this
),从而支持方法链式调用(Fluent API)。 -
示例:
@Accessors(chain = true) public class User { private String name; private int age; }
生成的 setter 方法:
public User setName(String name) { this.name = name; return this; } public User setAge(int age) { this.age = age; return this; }
使用时可以链式调用:
User user = new User().setName("Alice").setAge(25);
-
-
fluent
:-
类型:
boolean
-
默认值:
false
-
作用:如果设置为
true
,生成的 getter 和 setter 方法会省略get
和set
前缀,直接使用字段名作为方法名。 -
示例:
@Accessors(fluent = true) public class User { private String name; private int age; }
生成的 getter 和 setter 方法:
public String name() { return this.name; } public User name(String name) { this.name = name; return this; } public int age() { return this.age; } public User age(int age) { this.age = age; return this; }
使用时可以像这样调用:
User user = new User().name("Alice").age(25);
-
-
prefix
:-
类型:
String[]
-
默认值:空数组
-
作用:指定字段名的前缀,生成的 getter 和 setter 方法会去掉这些前缀。
-
示例:
@Accessors(prefix = "m_") public class User { private String m_name; private int m_age; }
生成的 getter 和 setter 方法:
public String getName() { return this.m_name; } public void setName(String name) { this.m_name = name; } public int getAge() { return this.m_age; } public void setAge(int age) { this.m_age = age; }
注意:
prefix
只是去掉前缀,不会改变字段的实际名称。
-
使用场景
-
链式调用:当你希望 setter 方法支持链式调用时,可以使用
@Accessors(chain = true)
。 -
简化方法名:当你希望 getter 和 setter 方法名更简洁时,可以使用
@Accessors(fluent = true)
。 -
字段名前缀:当字段名有统一的前缀时,可以使用
@Accessors(prefix = "前缀")
来简化 getter 和 setter 方法名。
示例代码
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true, prefix = "m_")
public class User {
private String m_name;
private int m_age;
}
// 使用
public class Main {
public static void main(String[] args) {
User user = new User().setName("Alice").setAge(25);
System.out.println(user.getName()); // 输出: Alice
System.out.println(user.getAge()); // 输出: 25
}
}
总结
-
@Accessors
是 Lombok 提供的一个注解,用于配置 getter 和 setter 方法的生成行为。 -
它支持链式调用、简化方法名以及处理字段名前缀等功能。
-
通过
@Accessors
,可以进一步减少样板代码,使代码更加简洁和易读。