Java GIN中的GWTP绑定枚举

Java GIN中的GWTP绑定枚举,java,gwt,compiler-errors,gwt-platform,gwt-gin,Java,Gwt,Compiler Errors,Gwt Platform,Gwt Gin,我试图使用以下代码行将枚举放入Ginject: ClientGinjector.java MyEnum getMyEnum(); ClientModule.java bind(MyEnum.class).in(Singleton.class); 但是,当我试图编译时,会出现以下错误: [错误]注入bla.blup.MyEnum时出错:无法创建或继承 绑定:为常量键“bla.blup.MyEnum”请求绑定,但没有 发现显式绑定 有人能帮我吗 常量(基元类型、字符串、类或枚举)必须在GIN模块

我试图使用以下代码行将枚举放入Ginject:

ClientGinjector.java

MyEnum getMyEnum();
ClientModule.java

bind(MyEnum.class).in(Singleton.class);
但是,当我试图编译时,会出现以下错误:

[错误]注入bla.blup.MyEnum时出错:无法创建或继承 绑定:为常量键“bla.blup.MyEnum”请求绑定,但没有 发现显式绑定

有人能帮我吗

常量(基元类型、字符串、类或枚举)必须在GIN模块中显式绑定(使用bindConstant()或bind())(因为GIN不会注入任何合理的默认值)

文件是请求绑定的地方(即声明依赖关系的地方),而GIN不能遵守该文件

常量(基元类型、字符串、类或枚举)必须在GIN模块中显式绑定(使用bindConstant()或bind())(因为GIN不会注入任何合理的默认值)

文件是请求绑定的地方(即声明依赖关系的地方),而GIN不能遵守该文件。

无法构造枚举类,其唯一有效实例是其枚举值。该menas必须绑定一个特定的枚举值,该值将被注入该枚举类型的任何字段或参数中

Guice/GIN鼓励您对常量使用绑定注释,因此您可以根据上下文注入不同的常量值;e、 g

@Named(“foo”)@injectmyenum-MyEnum;
–
bindConstant().annotatedWith(Names.named(“foo”)).to(MyEnum.foo);
如果您不想使用绑定批注(因为您知道在整个应用程序中只需要一个枚举值),则不能使用
bindcontent()
,但可以使用
toInstance

@injectmyenum MyEnum;
…
bind(MyEnum.class).toInstance(MyEnum.FOO);
但这只适用于Guice,而不适用于杜松子酒。在GIN中,您必须使用
提供程序
类或
@提供的
方法:

类MyEnumProvider实现提供程序{
@凌驾
公共MyEnum get(){
返回MyEnum.FOO;
}
}
…
bind(MyEnum.class).toProvider(MyEnumProvider.class);

@提供
髓鞘前脱髓鞘(){
返回MyEnum.FOO;
}
上述两种方法也适用于Guice。

无法构造枚举类,其唯一有效实例是其枚举值。该menas必须绑定一个特定的枚举值,该值将被注入该枚举类型的任何字段或参数中

Guice/GIN鼓励您对常量使用绑定注释,因此您可以根据上下文注入不同的常量值;e、 g

@Named(“foo”)@injectmyenum-MyEnum;
–
bindConstant().annotatedWith(Names.named(“foo”)).to(MyEnum.foo);
如果您不想使用绑定批注(因为您知道在整个应用程序中只需要一个枚举值),则不能使用
bindcontent()
,但可以使用
toInstance

@injectmyenum MyEnum;
…
bind(MyEnum.class).toInstance(MyEnum.FOO);
但这只适用于Guice,而不适用于杜松子酒。在GIN中,您必须使用
提供程序
类或
@提供的
方法:

类MyEnumProvider实现提供程序{
@凌驾
公共MyEnum get(){
返回MyEnum.FOO;
}
}
…
bind(MyEnum.class).toProvider(MyEnumProvider.class);

@提供
髓鞘前脱髓鞘(){
返回MyEnum.FOO;
}

上述两种方法也适用于Guice。

谢谢,但我已经阅读了这篇谷歌群组文章。我只是不明白我做错了什么。因为我绑定了这个枚举。请参阅我的起始文章。该枚举的位置如何?该枚举位于第二个项目包中。但是这个包是在Project.gwt.xml中继承的。我使用该软件包中的其他类没有任何问题。谢谢,但我已经阅读了这个谷歌群组条目。我只是不明白我做错了什么。因为我绑定了这个枚举。请参阅我的起始文章。该枚举的位置如何?该枚举位于第二个项目包中。但是这个包是在Project.gwt.xml中继承的。我使用该软件包中的其他类,没有任何问题。谢谢您的解释。我的用例将匹配您的第二个无注释的替代方案。但是我没有关于“绑定(…)”的方法“toInstance”。也许这是因为我的“ClientModule”是“AbstractPresenterModule”(GWTP)的扩展!我的错误,
toInstance
不是用金酒,而是用Guice。在GIN中,必须使用
提供者
@提供
方法。答案更新。谢谢你的解释。我的用例将匹配您的第二个无注释的替代方案。但是我没有关于“绑定(…)”的方法“toInstance”。也许这是因为我的“ClientModule”是“AbstractPresenterModule”(GWTP)的扩展!我的错误,
toInstance
不是用金酒,而是用Guice。在GIN中,必须使用
提供者
@提供
方法。答案已更新。