Я новичок ie в рамках Guice, необходимо ввести разные экземпляры одного и того же класса, скажем, "TestAB c" на основе некоторого ключа. Я могу добиться этого, используя аннотацию @NAmed @Named("A", new TestAbc), @Named("B",new TestAbc)
, но это требует жесткого кодирования всех значений. Однако я хотел бы использовать enum в качестве ключа, чтобы любой класс, которому требуется объект класса 'TestAb c', мог запросить конкретный c one.
class TestAbc{
String name;
public TestAbc(String name){
this.name=name;
}
}
class testModule extends extends AbstractModule {
@Override
protected void configure() {
Provider<Injector> injectorProvider = binder().getProvider(Injector.class);
MapBinder<String, TestAbC> mapbinder
= MapBinder.newMapBinder(binder(), String.class, TestAbc.class);
Arrays.stream(TestEnum.values()).forEach(x->{
mapbinder.addBinding(x.name()).toProvider(new TestAbc(x.name));
});
}
В другом классе возможно ли это сделать что-то вроде этого:
class Test2{
@Inject
Test2(@Named('A') TestAbc abc){} // here 'A' refers to enum key.
}
Я иду в правильном направлении? Если да, то как этого добиться, используя хитрость. Если нет, пожалуйста, дайте мне знать правильный подход для достижения того же.