java - 如何为 Guice 指定默认的枚举实例?

标签 java enums default guice

我需要类似的东西

@DefaultInstance(Level.NORMAL)
enum Level {NORMAL, FANCY, DEBUGGING}

这将使 Guice 为表达式返回 Level.NORMAL

injector.getInstance(Level.class)

没有像@DefaultInstance 这样的东西。作为一种解决方法,我已经尝试使用 @ProvidedBy 和一个普通的 Provider,但它不起作用。

最佳答案

也许覆盖模块可以帮助你。可以使用 AppLevel 模块配置默认级别:

public class AppModule extends AbstractModule {
    @Override
    public void configure() {
        bind(Level.class).toInstance(Level.NORMAL);
        // other bindings
    }
}

并且可以在一个小的覆盖模块中配置一个特定的:

public class FancyLevelModule extends AbstractModule {
    @Override
    public void configure() {
        bind(Level.class).toInstance(Level.FANCY);
    }
}

最后只需创建一个注入(inject)器,用特定的 Level 配置覆盖 AppModule:

public static void main(String[] args) {
    Injector injector = 
        Guice.createInjector(
            Modules.override(new AppModule()).with(new FancyLevelModule())
    );

    System.out.println("level = " + injector.getInstance(Level.class));
}

更新

这个问题可以用不同的方式解决。假设 Level 在类中用作注入(inject)字段:

class Some
{
  @Injected(optional = true)
  private Level level = Level.NORMAL;
}

默认关卡将作为 Some 实例创建的一部分进行初始化。如果一些 Guice 配置模块声明了一些其他级别,它将被选择性地注入(inject)。

关于java - 如何为 Guice 指定默认的枚举实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170910/

相关文章:

java - 使用@EmbeddedId 进行映射时出现 Eclipse 错误

java - 更新命令行应用状态

java - Gson 使用通用代码将枚举序列化和反序列化为整数

ruby-on-rails - activerecord 枚举和脏属性

Python:根据给定的参数给出答案

Java Android 代码将在 Nougat 上运行。如何在其他安卓上运行

c# - 在 C# 和 C++ 之间共享源文件

java - 当在字段上设置默认值时,JPA/Hibernate 插入 NULL

date - tibco Spotfire 默认情况下将过滤器设置为持续 8 天

Java以表格格式输出到文件?