我正在使用 Google Guice 4.1.0 来编写提供程序。但是在注入(inject)枚举对象时出现错误(自定义提供程序中的错误,java.lang.IllegalArgumentException:无法反射地创建枚举对象)
我尝试使用 @Inject 注释从枚举中删除构造函数,并添加 @NoArgsConstructors 和 @AllArgsConstructors,但收到错误消息,枚举必须具有一个带有 @Inject 注释的构造函数,或者只有一个不带参数的构造函数。
我的枚举:
@AllArgsConstructor
@Getter
public enum IngestionMode {
HAZELCAST(HazelcastMapCache.class),
NEW_INGESTION(IngestionDataStoreCache.class);
@Inject
IngestionMode(){
cacheTypeClass = HazelcastMapCache.class;
}
public Class cacheTypeClass;
}
对应的提供者:
@Provides
@Singleton
public IngestionMode getIngestionOperatingMode() {
return IngestionMode.HAZELCAST;
}
HazelcastMapCache 和 IngestionDataStoreCache 是普通 Java 类。
使用以下枚举会导致错误“枚举必须具有一个带 @Inject 注释的构造函数或一个且仅有一个不带参数的构造函数。”
@RequiredArgsConstructor
@Getter
public enum IngestionMode {
HAZELCAST(HazelcastMapCache.class),
NEW_INGESTION(IngestionDataStoreCache.class);
private final Class cacheTypeClass;
}
有什么可能的解决方法吗?
最佳答案
只需在您的模块
中执行此操作即可:
@Override protected void configure() {
bind(IngestionMode.class).toInstance(IngestionMode.HAZELCAST);
}
关于java - 如何为枚举对象编写自定义提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737140/