java - 如何在 Dagger 中为 map 创建值

标签 java dagger

在我的 nano 项目中,我决定用命令映射替换大而讨厌的 switch 语句。现在我正在整理我的代码,我想创建为我提供填充 map 的提供程序。

我想知道,什么是最佳实践。最初我在想这样的事情:

@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);
}

关于java - 如何在 Dagger 中为 map 创建值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846560/

相关文章:

java - css 表达式不适用于 primefaces

android - 刀柄 : by viewModels(): RuntimeException: Cannot create an instance of class ProductsListViewModel

android - 无法解析变量 '${project.groupId}'

android - 从 Android Dagger 中的依赖模块注入(inject)对象

java - Bean 无法通过 primefaces 识别该方法

java - Appengine for Java 上的编程备份

java - 在 ant 任务中指定 jvm 参数

java - 找不到导入 javax.inject.Inject 包

java - 错误 : [Dagger/MissingBinding] when trying building the project

java - 输出目录中多个.txt文件内的字符串