You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Immutables构建器同时生成公共默认构造函数与静态工厂方法?

实现Immutables构建器同时支持公共默认构造函数和静态工厂方法

完全可以通过Immutables的@Style注解属性组合来实现你的需求!下面是具体的配置方案和代码示例:

关键配置要点

你需要在自定义的@Style注解中设置以下几个核心属性:

  • defaultBuilder = true:这是让Builder类生成公共无参构造器的关键,正好满足DynamoDbEnhanced客户端的要求。
  • builder = "builder":指定生成的静态工厂方法名为builder,这样你可以通过Customer.builder()的方式初始化构建器。
  • visibility = Style.ImplementationVisibility.PUBLIC:确保生成的Builder类是公共可见的,保证外部代码(包括DynamoDb客户端)能访问到它的默认构造器。
  • buildMethodName = "build":保持默认的构建方法名称,无需额外调整。

代码示例

首先定义你的自定义Style注解:

import org.immutables.value.Value.Style;

@Style(
    builder = "builder",
    defaultBuilder = true,
    visibility = Style.ImplementationVisibility.PUBLIC,
    buildMethodName = "build"
)
public @interface CustomerStyle {}

然后在你的Immutable接口上使用这个Style:

import org.immutables.value.Value;

@CustomerStyle
@Value.Immutable
public interface Customer {
    String name();
    int age();

    // Immutables会自动生成这个静态builder方法,无需手动实现
    static ImmutableCustomer.Builder builder() {
        return ImmutableCustomer.builder();
    }
}

验证两种构建方式

现在你可以同时使用两种方式创建Customer实例:

  1. 公共默认构造器方式(满足DynamoDbEnhanced需求):
Customer customer = new ImmutableCustomer.Builder()
    .name("Joe")
    .age(21)
    .build();
  1. 静态工厂方法方式(符合你的使用偏好):
Customer customer = Customer.builder()
    .name("Joe")
    .age(21)
    .build();

为什么这样配置有效

  • defaultBuilder = true会让Immutables为生成的Builder类添加一个公共的无参构造函数,这正是DynamoDbEnhanced客户端所要求的。
  • builder = "builder"配置会让Immutables在你的Customer接口的实现类上生成一个静态的builder()方法,方便你以更简洁的方式初始化构建器。
  • 公共可见性配置确保了无论是直接new Builder还是调用静态方法,外部代码都能正常访问到所需的类和方法。

内容的提问来源于stack exchange,提问作者Zack U

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:08:14