gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:48 25 4
gpt4 key购买 nike

我需要类似的东西

@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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com