lombok Accessors
时间: 2024-06-02 22:06:58 浏览: 190
Lombok是一种Java库,可以通过注解来减少Java代码的样板。其中,@Accessors注解用于配置getter和setter方法的生成方式。通过该注解,可以自定义getter和setter方法的名称、是否使用链式调用等。具体来说,@Accessors注解支持的属性包括prefix、chain、fluent、lazy和readonly。其中,prefix属性指定生成的getter和setter方法名称的前缀;chain属性指定是否使用链式调用;fluent属性指定是否生成返回this的setter方法;lazy属性指定是否使用懒加载;readonly属性指定是否只生成getter方法而不生成setter方法。
举个例子,如果我们想要在Java类中使用链式调用方式来设置类属性值,可以在类上加上@Accessors(chain=true)注解,然后在类中使用@Setter注解来自动生成setter方法,就可以实现链式调用了。
相关问题
lombok @Accessors(chain = true) 是什么意思?
@Accessors(chain = true) 是 Lombok 提供的一个注解,它的作用是为一个类生成 chain 链式调用的方法。
当我们使用 @Accessors(chain = true) 注解注释一个类时,Lombok 会为该类的每个返回值为该类本身的 setter 方法自动添加 @return this 语句,从而实现链式调用。这样,我们就可以使用一条语句实现对一个对象的多个属性进行设置,从而简化了代码。
举个例子,假设有一个类 Person,使用 @Accessors(chain = true) 后,我们可以这样进行链式调用:
```
Person person = new Person().setName("Tom").setAge(20);
```
这条语句等价于:
```
Person person = new Person();
person.setName("Tom");
person.setAge(20);
```
但是使用链式调用更加简洁明了。
lombok @Builder和Accessors
### Lombok 中 `@Builder` 和 `@Accessors` 注解详解
#### 使用方法及功能描述
#### @Builder 注解
`@Builder` 是 Lombok 提供的一个强大工具,用于简化对象的创建过程。通过此注解可以在编译时自动生成一个内部静态类 Builder 及其相关的方法,从而实现流畅的 API 设计模式。
当与 `@Data` 结合使用时需要注意添加无参构造函数 (`@NoArgsConstructor`) 和全参构造函数 (`@AllArgsConstructor`) 来确保正常工作[^1]。下面是一个简单的例子展示如何利用 `@Builder` 创建并初始化对象:
```java
import lombok.Builder;
import lombok.Data;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Person {
private String firstName;
private String lastName;
}
```
这样就可以像下面这样轻松地实例化对象了:
```java
Person person = Person.builder()
.firstName("John")
.lastName("Doe")
.build();
```
#### @Accessors 注解
另一方面,`@Accessors` 主要用来定制 getter/setter 方法的行为。比如可以通过设置前缀参数让生成的方法忽略特定前缀字符;也可以开启链式调用特性使得每次 setter 调用返回当前对象本身以便连续赋值操作而不需要额外变量存储中间状态[^3]。
这里有一个具体的案例说明带有前缀配置的 `@Accessors` 如何影响成员变量访问器名称:
```java
import lombok.Accessors;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Accessors(prefix = "p")
class User {
private Long pId;
private String pName;
}
// 产生的 Getter/Setter 将会是 getId(), setId(Long), getName(), setName(String)
```
对于启用链条特性的场景,则有如下写法:
```java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
static class EmsUser {
private String email;
private String mobile;
}
EmsUser user = new EmsUser().setEmail("example@example.com").setMobile("1234567890");
```
#### 关键差异比较
| 特性 | @Builder | @Accessors |
|--------------------|---------------|
| **主要用途** | 构建复杂不可变对象 | 定制 Getters/Setters 行为 |
| **链式调用支持** | 自动提供 | 需显式声明 (chain=true) |
| **默认值设定** | 支持 | 不直接涉及 |
| **性能开销** | 较高(因为引入了额外 builder 类) | 更低 |
综上所述,在选择这两个注解之一之前应该考虑具体需求以及项目上下文中哪个更适合解决问题[^4]。
阅读全文
相关推荐
















