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

Guice能否注入带有@SuperBuilder注解的类的依赖实例?

结论

Guice 无法自动解析得到两个子类的实例,你需要额外编写逻辑提供子类实例。

原因

  • 你为BaseClass和两个子类添加的@SuperBuilder注解仅会生成对应建造者模式的相关代码,不会生成带@Inject注解的构造方法,Guice没有默认途径实例化ChildClass1和ChildClass2。
  • 你编写的List<BaseClass>的@Provides方法的参数ChildClass1 c1、ChildClass2 c2属于方法注入的依赖,Guice需要先能获取这两个类的实例才能调用该方法生成List。

解决方案

你可以选择以下任意一种方式完成子类实例的提供:

方案1:为子类添加注入构造注解

给两个子类添加Lombok的构造注解,指定生成带@Inject的构造方法,注意需要包含父类的final字段:

@SuperBuilder
@AllArgsConstructor(onConstructor = @__(@Inject))
public class ChildClass1 extends BaseClass {
    DependencyA depA;
}

@SuperBuilder
@AllArgsConstructor(onConstructor = @__(@Inject))
public class ChildClass2 extends BaseClass {
    DependencyB depB;
}

方案2:单独编写子类的@Provides方法

直接在Guice模块中编写子类实例的提供逻辑,复用已有的@SuperBuilder能力:

@Provides
public ChildClass1 provideChildClass1(DependencyA depA, DependencyC depC) {
    return ChildClass1.builder()
            .depC(depC)
            .depA(depA)
            .build();
}

@Provides
public ChildClass2 provideChildClass2(DependencyB depB, DependencyC depC) {
    return ChildClass2.builder()
            .depC(depC)
            .depB(depB)
            .build();
}

注意:你贴出的子类定义存在笔误,两个子类都命名为了ChildClass1,请修正为ChildClass1和ChildClass2避免编译错误。

内容的提问来源于stack exchange,提问作者Anit Aggarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 05:15:08