我正在使用Google Guice 4.1.0编写提供程序。但在插入枚举对象时出现错误(自定义提供程序中的错误,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;
}
有什么解决方法可以解决这个问题?
发布于 2019-09-06 08:10:20
只需在您的Module
中执行此操作
@Override protected void configure() {
bind(IngestionMode.class).toInstance(IngestionMode.HAZELCAST);
}
https://stackoverflow.com/questions/57737140
复制