有没有一种方法可以配置Lombok,使其生成的getter为field()而不是getField()?

4
我想配置Lombok,使其生成名为field()而不是getField()的getter。
这个可以实现吗?如果可以,如何操作?

顺便提一下,这是Java 16+中records的默认行为。成员字段可以通过两种方式之一访问:成员字段名称(somePerson.name)或与字段名称相同的方法(somePerson.name())。 - Basil Bourque
1个回答

3
lombok.accessors.fluent = true

fluent选项为我们提供访问方式,这些方式没有get或set前缀。

现在我们来看一下chain选项,但由于它默认启用,所以现在让我们明确地禁用它:

@Accessors(fluent = true, chain = false)
@Getter
@Setter
public class FluentAccount {
    private String name;
    private BigDecimal balance;
}

@Test
public void givenFluentAccount_thenUseFluentAccessors() {
    FluentAccount account = new FluentAccount();
    account.name("Fluent Account");
    account.balance(BigDecimal.TEN);

    assertEquals("Fluent Account", account.name()); 
    assertEquals(BigDecimal.TEN, account.balance());
}

现在让我们来看看chain选项:

@Accessors(chain = true)

chain选项提供了返回this的setter。请注意,默认情况下它设置为true,但为了清晰起见,我们将明确设置它。

这意味着我们可以在一个语句中组合多个set操作。

让我们在流畅访问器的基础上构建,并将chain参数更改为true:

@Accessors(fluent = true, chain = true)
@Getter 
@Setter 
public class ChainedFluentAccount { 
    private String name; 
    private BigDecimal balance;
}

如果省略链和直接指向,我们可以获得相同的效果:

@Accessors(fluent = true)

现在让我们看一下这如何影响我们的测试案例:
@Test
public void givenChainedFluentAccount_thenUseChainedFluentAccessors() {
    ChainedFluentAccount account = new ChainedFluentAccount()
      .name("Fluent Account")
      .balance(BigDecimal.TEN);

    assertEquals("Fluent Account", account.name()); 
    assertEquals(BigDecimal.TEN, account.balance());
}

注意使用setter时新语句变得更长,这些setter被绑在一起,从而去除了某些模式。

当然,这就是 Lombok @Builder 如何使用链式的 fluent 访问器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接