gpt4 book ai didi

java - 如何将特定参数绑定(bind)到自定义注释的实例?

转载 作者:行者123 更新时间:2023-12-01 15:48:43 28 4
gpt4 key购买 nike

如何使用 Guice 完成以下工作?

// The Guice Module configuration
void configure() {
// The following won't compile because HelpTopicId is abstract.
// What do I do instead?
bind(new TypeLiteral<String>(){}).
annotatedWith(new HelpTopicId("A")).toInstance("1");
bind(new TypeLiteral<String>(){}).
annotatedWith(new HelpTopicId("B")).toInstance("2");
}

public @interface HelpTopicId {
public String helpTopicName();
}

public class Foo {
public Foo(@HelpTopicId("A") String helpTopicId) {
// I expect 1 and not 2 here because the actual parameter to @HelpTopicId is "A"
assertEquals(1, helpTopicId);
}
}

最佳答案

最简单的方法可能是使用 @Provides方法:

@Provides @HelpTopicId("A")
protected String provideA() {
return "1";
}

或者,您可以创建 HelpTopicId 的可实例化实现注释/接口(interface)类似于 Names.named 的实现(参见NamedImpl)。请注意,对于像hashCode()这样的事情有一些特殊的规则。为注释而实现... NamedImpl遵循这些规则。

此外,使用new TypeLiteral<String>(){}很浪费...String.class可以用来代替它的位置。此外,对于String , int等。您通常应该使用 bindConstant()而不是bind(String.class) 。它更简单,要求您提供绑定(bind)注释,并且仅限于基元,String s,Class文字和 enum s。

关于java - 如何将特定参数绑定(bind)到自定义注释的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571680/

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