gpt4 book ai didi

java - 如何使用 Dagger 重写 Component 的 Builder 接口(interface)

转载 作者:行者123 更新时间:2023-12-02 00:35:23 26 4
gpt4 key购买 nike

假设我有一个带有 @Inject 注释的 Student 类。

public class Student {

private String name;
private Integer age;

@Inject
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}
}

然后我有一个模块,在其中使用 @Provides 注释添加所有必需的依赖项。

@Module
public class StudentModule {

private String name;
private Integer age;

public StudentModule(String name, Integer age) {
this.name = name;
this.age = age;
}

@Provides
String provideName() {
return name;
}

@Provides
Integer provideAge() {
return age;
}
}

当然我有 StudentComponent。

@Component(modules = {StudentModule.class})
public interface StudentComponent {

Student getStudent();

@Component.Builder
interface Builder {

@BindsInstance
Builder studentName(String studentName);

@BindsInstance
Builder studentAge(Integer studentAge);

StudentComponent build();
}
}

我想覆盖构建器,以便将值传递给构建器本身,而不是模块。但每当我运行此命令时,我都会收到错误: @Component.Builder 缺少所需模块或组件的 setter :[com.example.javadagger.StudentModule]

最佳答案

@Component.Builder is missing setters for required modules or components: [com.example.javadagger.StudentModule]

这意味着 Dagger 无法创建 StudentModule (在您的情况下,因为它没有默认构造函数)并且无法添加它。它说您需要在创建组件时提供模块,但您没有这样做。

由于您想直接通过构建器绑定(bind)参数 StringInteger - 并且您仅使用该模块来添加这两种相同的类型 - 您的问题的解决方案将完全删除该模块。不再需要了。

否则,如果由于某种原因您想要保留具有非默认构造函数的模块,您也可以将所需的方法添加到构建器,如 documentation states :

  • ...
  • There must be a setter method for each non-abstract module that has non-static binding methods, unless Dagger can instantiate that module with a visible no-argument constructor.
  • There may be setter methods for modules that Dagger can instantiate or does not need to instantiate.

关于java - 如何使用 Dagger 重写 Component 的 Builder 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57982020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com