java - 如何为枚举对象编写自定义提供程序?

标签 java dependency-injection enums annotations guice

我正在使用 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/

相关文章:

c# - 如何访问用AddSingleton<T>注入(inject)的后台服务的成员

java - 检查指定时间内的变量变化?

java - NetBeans IDE 8.0.2 支持 Netbeans IDE 7

dependency-injection - 将 Serilog 注入(inject)存储库以进行日志记录的最佳方法

c# - 简单的注入(inject)器在运行时更改注册

asp.net-mvc - 如何本地化枚举并使用类似于 Html.SelectListFor<T> 的内容

java - 以不同的方式将枚举映射到 Spring 形式选择

c# - 如何从 EventLogEntryType 枚举中获取 int 值

java - 澄清新的JVM内存参数InitialRAMPercentage和MinRAMPercentage的含义

java - Struts2 ValueStack 如何处理多个请求