如何在匕首中为地图创建值
How to create values for map in dagger
在我的 nano 项目中,我决定用命令映射替换大而讨厌的 switch 语句。现在我正在整理我的代码,我想创建为我提供填充地图的提供程序。
我想知道,最佳做法是什么。最初我在想这样的事情:
@Provides
ActionResolver provideActionResolver(Dependency dep1,Dependency dep2) {
Map<SomeEnum,Action> map = new HashMap<>();
map.put(SomeEnum.A1,new Action1(dep1);
map.put(SomeEnum.A2,new Action2(dep2);
return new ActionResolver(map);
}
我想知道这样做是否正确,最佳做法是什么。
使用 Map Multibindings,如果我是正确的,您可以执行以下操作:
@MapKey
@interface SomeEnumKey {
SomeEnum value();
}
@Provides
@IntoMap
@SomeEnumKey(SomeEnum.A1)
Action action1(@Named("dep1") Dependency dep1) {
return new Action1(dep1);
}
@Provides
@IntoMap
@SomeEnumKey(SomeEnum.A2)
Action action2(@Named("dep2") Dependency dep2) {
return new Action2(dep2);
}
@Provides
ActionResolver provideActionResolver(Map<SomeEnum, Action> actions) {
return new ActionResolver(actions);
}
在我的 nano 项目中,我决定用命令映射替换大而讨厌的 switch 语句。现在我正在整理我的代码,我想创建为我提供填充地图的提供程序。
我想知道,最佳做法是什么。最初我在想这样的事情:
@Provides
ActionResolver provideActionResolver(Dependency dep1,Dependency dep2) {
Map<SomeEnum,Action> map = new HashMap<>();
map.put(SomeEnum.A1,new Action1(dep1);
map.put(SomeEnum.A2,new Action2(dep2);
return new ActionResolver(map);
}
我想知道这样做是否正确,最佳做法是什么。
使用 Map Multibindings,如果我是正确的,您可以执行以下操作:
@MapKey
@interface SomeEnumKey {
SomeEnum value();
}
@Provides
@IntoMap
@SomeEnumKey(SomeEnum.A1)
Action action1(@Named("dep1") Dependency dep1) {
return new Action1(dep1);
}
@Provides
@IntoMap
@SomeEnumKey(SomeEnum.A2)
Action action2(@Named("dep2") Dependency dep2) {
return new Action2(dep2);
}
@Provides
ActionResolver provideActionResolver(Map<SomeEnum, Action> actions) {
return new ActionResolver(actions);
}