gpt4 book ai didi

java - 在 Guice 中绑定(bind) Set

转载 作者:行者123 更新时间:2023-12-01 19:41:43 24 4
gpt4 key购买 nike

我想在 Guice 中绑定(bind)一个 Set,如下所示:

public class TestModule extends AbstractModule {
@Override
protected void configure() {
Set<String> testSet = Sets.newHashSet("Hello", "World");
bind(Set.class).annotatedWith(Named.named("Test.Set")).toInstance(testSet);
}
}

我已确保在创建注入(inject)器时包含此模块。我稍后尝试使用这个绑定(bind)集:

public class TestClass {
@Inject
public NewReleaseRunner(@Named("Test.Set") Set<String> testSet) {
System.out.println(testSet.toString());
}
}

但是,这会导致失败:No implementation for java.util.Set<java.lang.String> annotated with @com.google.inject.name.Named(value=Test.Set) was bound.

我担心的是Set<String>是通用的,但绑定(bind)到 Set.class 。我可以做什么来解决这个问题?

最佳答案

我认为你有两个选择。替换

bind(Set.class).annotatedWith(Named.named("Test.Set")).toInstance(testSet);

bind(new TypeLiteral<Set<String>>() {}).annotatedWith(Named.named("Test.Set")).toInstance(testSet);

或者删除模块的 configure() 绑定(bind)并添加

@Provides
@Named("Test.Set")
public Set<String> stringSet() {
return Sets.newHashSet("Hello", "World");
}

关于java - 在 Guice 中绑定(bind) Set<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55191415/

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