匕首2:生成的代码编译犯规
问题描述:
我将不胜感激一些帮助的情况我已经在那里匕首生成的代码实际上并不编译。我们对子组件进行了相当详细的设置,如下图所示,以S结尾的组件是子组件。
A - BS
|
CS-DS
|
ES - FS
所有子含有建设者接口,就像这样:
@Subcomponent(modules = BS_Module.class)
public interface BS {
@Subcomponent.Builder
public interface Builder {
Builder requestModule(BS module);
BS build();
}
}
在A用模块我有以下以访问其他组件:
@Provides
@Singleton
@Inject
public BS provideBS(Provider<BS.Builder> builder) {
return builder.get().build();
}
整件事情生成得很好,但是为provideB生成的代码不能编译:
@Override
public BS provideBS() {
return new BSImpl();
}
然而BSImpl行得有一个零个参数的构造,唯一的:
private BSImpl(BSBuilder builder) {...}
希望我做的情况有所明确,理解,因为我不知道怎么去解决这个任何帮助。
解决
我图周围走错了路的依赖...... A不能直接依赖于提供什么BS,BS只能依靠什么A提供。
答
解决的评论:
@DavidRawson最终却是相当简单的。我以错误的方式得到了依赖关系图...... A不能直接依赖于BS提供什么,BS只能依赖于A提供的内容。现在剩下的唯一东西是找出示波器,因为我无法让BS提供由于A重复范围而产生的单态。 - Michel Onstein
您能否请您发布编译错误?另外,如果你使用标准的Java类名,它可以帮助读者解决你的问题。 –
@DavidRawson根据你的建议修正了类名。错误消息非常简单:类BSImpl中的构造函数BSImpl不能应用于给定的类型;要求:BSBuilder,找到:没有参数,原因:实际和正式参数列表的长度不同。 –
@DavidRawson根据您的第二条评论。你不能实际实例化构建器,因为Dagger将它创建为私有内部类 –