Java 如何为dagger中的贴图创建值

Java 如何为dagger中的贴图创建值,java,dagger,Java,Dagger,在我的nano项目中,我决定用命令映射替换big-snaty-switch语句。现在我正在整理我的代码,我想创建一个提供者,它为我提供填充的映射 我想知道,这方面的最佳做法是什么。起初我想的是这样的: @Provides ActionResolver provideActionResolver(Dependency dep1,Dependency dep2) { Map<SomeEnum,Action> map = new HashMap<>(); map.pu

在我的nano项目中,我决定用命令映射替换big-snaty-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);
}
@提供
ActionResolver提供ActionResolver(依赖项dep1、依赖项dep2){
Map Map=newhashmap();
map.put(SomeEnum.A1,新操作1(dep1);
map.put(某些枚举A2,新操作2(dep2);
返回新的ActionResolver(map);
}
我想知道这是一条正确的道路,对此的最佳做法是什么。

如果我是正确的,您可以执行以下操作:

@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);
}
@MapKey
@接口密钥{
SomeEnum值();
}
@提供
@英托马普
@SomeEnumKey(SomeEnum.A1)
操作action1(@Named(“dep1”)依赖项dep1){
返回新操作1(dep1);
}
@提供
@英托马普
@SomeEnumKey(SomeEnum.A2)
操作action2(@Named(“dep2”)依赖项dep2){
返回新的Action2(dep2);
}
@提供
ActionResolver提供ActionResolver(映射操作){
返回新的ActionResolver(操作);
}

您可能正在寻找+1,但如果您不知道需要地图中的每个
操作
实例,您可能更喜欢
地图
,以节省一些创建/收集成本。