Java 有没有一种方法可以将几个实例绑定到Guice中的许多不同的键?
我们需要在一些对象的许多类型之间创建一些映射,用枚举值描述:Java 有没有一种方法可以将几个实例绑定到Guice中的许多不同的键?,java,collections,guava,guice,Java,Collections,Guava,Guice,我们需要在一些对象的许多类型之间创建一些映射,用枚举值描述: public enum ObjectType { Type1,Type2,Type3,Type4,Type5...TypeN } 。。。及 用于这些类型的策略的几个实例 或者,例如,与提到的对象类型相关的布尔值 Guice的MapBinder可以用于此目的,还可以与standart HashMap以及google collections的一些复杂地图一起使用 我想要的是找到一些适合这种匹配的“低密度”结构的“价值观”。我想看看像这样
public enum ObjectType {
Type1,Type2,Type3,Type4,Type5...TypeN
}
。。。及
binder.addBinding(ObjectType.Type1,ObjectType.Type2...ObjectType.Type6).toInstance(Boolean.TRUE)
or
binder.addBinding(ObjectType.Type1,ObjectType.Type2...ObjectType.Type6).toInstance(new SomeStrategyForFirstSixObjectType())
有什么建议吗?最简单的方法是在值之间循环:
for (ObjectType type : ObjectType.values()) {
// Assumes you've created a binding annotation @YourAnnotation(ObjectType) along
// with an implementation called YourAnnotationImpl.
bind(Boolean.class)
.annotatedWith(new YourAnnotationImpl(type))
.toInstance(Boolean.TRUE));
// Now you can inject "@YourAnnotation(Type1) Boolean yourValue" and so on.
}
然而,尽管它在某些方面可能有意义,但您可能不希望对Guice中的每个值都有单独的布尔绑定,尤其是在绑定多个相关值时。相反,您可以考虑将所有的内容集合到一个地图中
:
bind(new TypeLiteral<Map<ObjectType, Boolean>> {})
.toInstance(ImmutableMaps.<ObjectType, Boolean>newBuilder()
.add(Type1, TRUE)
.add(Type2, TRUE)
// [snip, you could replace with a for-loop or pre-built map]
.build());
// Now you can inject "Map<ObjectType, Boolean>".
bind(新的TypeLiteral{})
.toInstance(ImmutableMaps.newBuilder()
.add(类型1,TRUE)
.add(类型2,真)
//[剪报,您可以用for循环或预构建的地图替换]
.build());
//现在可以注入“Map”。
Try(and)++simple for循环。