Класс перечисления не может быть создан, его единственными допустимыми экземплярами являются значения перечисления. Это меню вам нужно привязать конкретное значение перечисления, которое будет введено в любое поле или параметр этого типа перечисления.
Guice/GIN рекомендует вам использовать аннотации привязки для констант, поэтому вы можете вводить разные константные значения в зависимости от контекста; например
@Named("foo") @Inject MyEnum myEnum;
–
bindConstant().annotatedWith(Names.named("foo")).to(MyEnum.FOO);
Если вы не хотите использовать аннотацию привязки (потому что вы знаете, что вам понадобится только одно значение перечисления во всем приложении), вы не можете использовать bindConstant()
, но вы можете использовать toInstance
:
@Inject MyEnum myEnum;
…
bind(MyEnum.class).toInstance(MyEnum.FOO);
Это будет работать только в Guice, но не в GIN, который не имеет toInstance
. В GIN вы должны использовать класс Provider
или метод @Provides
:
class MyEnumProvider implements Provider<MyEnum> {
@Override
public MyEnum get() {
return MyEnum.FOO;
}
}
…
bind(MyEnum.class).toProvider(MyEnumProvider.class);
or
@Provides
MyEnum provideMyEnum() {
return MyEnum.FOO;
}
Оба описанных выше подхода также будут работать с Guice.
person
Thomas Broyer
schedule
19.06.2013