代理的目的在 Dagger 2 生成的代码中提供
2022-09-04 22:59:41
我有这个匕首模块。我想了解生成的代码,以便验证我的 Dagger 配置是否最佳。
@Module
public class TypefaceModule {
@Provides @Singleton @Named("Roboto Light")
static Typeface provideRobotoLight(AssetManager assets) {
return Typeface.createFromAsset(assets, "fonts/Roboto-Light.ttf");
}
}
下面是生成的代码 (Dagger 2.14.1):
public final class TypefaceModule_ProvideRobotoLightFactory implements Factory<Typeface> {
private final Provider<AssetManager> assetsProvider;
public TypefaceModule_ProvideRobotoLightFactory(Provider<AssetManager> assetsProvider) {
this.assetsProvider = assetsProvider;
}
@Override
public Typeface get() {
return Preconditions.checkNotNull(
TypefaceModule.provideRobotoLight(assetsProvider.get()),
"Cannot return null from a non-@Nullable @Provides method");
}
public static TypefaceModule_ProvideRobotoLightFactory create(
Provider<AssetManager> assetsProvider) {
return new TypefaceModule_ProvideRobotoLightFactory(assetsProvider);
}
public static Typeface proxyProvideRobotoLight(AssetManager assets) {
return Preconditions.checkNotNull(
TypefaceModule.provideRobotoLight(assets),
"Cannot return null from a non-@Nullable @Provides method");
}
}
有两个函数可以执行几乎相同的操作: 实例方法 ,和 静态方法 。get()
proxyProvideRobotoLight()
为什么 Dagger 生成了此代码的两个版本,这两个版本都静态调用模块的方法?一个不能打电话给另一个吗?provide()
(顺便说一句,我确实意识到我不再需要在我的应用资产中捆绑字体。这不是这里的问题。