假設我有一個帶有 @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 注釋添加所有必需的依賴項。@Modulepublic 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(); }}我想重寫 Builder,以便將值傳遞給構建器本身,而不是模塊。但每當我運行這個時,我都會收到錯誤:@Component.Builder is missing setters for required modules or components: [com.example.javadagger.StudentModule]
1 回答

郎朗坤
TA貢獻1921條經驗 獲得超9個贊
@Component.Builder 缺少所需模塊或組件的設置器:[com.example.javadagger.StudentModule]
這意味著 Dagger 無法創建StudentModule
(在您的情況下,因為它沒有默認構造函數)并且無法添加它。它說您需要在創建組件時提供模塊,但您沒有這樣做。
由于您希望直接通過構建器綁定參數,并且您僅使用該模塊來添加相同的兩種類型,因此問題的解決方案是完全刪除該模塊String
。Integer
不再需要了。
否則,如果由于某種原因您想要保留具有非默認構造函數的模塊,您還可以將所需的方法添加到構建器,如文檔所述:
...
每個具有非靜態綁定方法的非抽象模塊都必須有一個 setter 方法,除非 Dagger 可以使用可見的無參數構造函數實例化該模塊。
Dagger 可以實例化或不需要實例化的模塊可能有 setter 方法。
添加回答
舉報
0/150
提交
取消