【发布时间】:2012-11-17 20:55:29
【问题描述】:
我正在尝试配置我的 GIN 模块以将 ActivityManager 请求绑定到 DefaultActivityManagerProvider:
import com.google.inject.Provider;
public class DefaultActivityManagerProvider implements Provider<ActivityManager> {
@Override
public ActivityManager get() {
return new ActivityManager(new MyDefaultActivityMapper());
}
}
但是当我去实际绑定它时:
public class MyAppGinModule extends AbstractGinModule {
@Override
protected void configure() {
bind(ActivityManager.class).toProvider(DefaultActivityManagerProvider.class);
}
}
bind(...) 语句出现编译错误:
Bound mismatch: The generic method toProvider(Class<I>) of type
GinLinkedBindingBuilder<T> is not applicable for the arguments
(Class<DefaultActivityManagerProvider>). The inferred type
DefaultActivityManagerProvider is not a valid substitute for the
bounded parameter <I extends Provider<? extends ActivityManager>>
我在这里做错了什么?!? 我已经关注了无数示例,例如this one,但无法弄清楚为什么我会收到错误消息!提前致谢!
【问题讨论】:
-
Guice 和 GWT 是什么版本的?你已经用谷歌搜索了那个错误信息,不是吗?
-
GWT - 2.4, GIN - 2.0, Guice - 3.0 并且是谷歌搜索/初步研究(零结果):-(
-
" 对于有界参数 >" 认为您可能会遗漏部分错误消息 - 它应该指定期望边界适合的类型。 (编辑:我打赌“通用方法 toProvider(Class)”也应该有一些泛型)
-
很好 @Colin - 我认为 StackOverflow 正在解析一些通用的东西,因为我将编译错误添加为块引号(带有前导 "> " 而不是代码块(带有前导四倍缩进“”)。我更新了编译错误并验证它与 Eclipse 显示的内容相匹配。再次感谢!
-
关于“同一个 ActivityManager”的评论试图确保您没有绑定
com.a.ActivityManager,而是要求注入org.b.ActivityManager- 因为它们不匹配,Guice(实际上, Java)认为你在说疯话。由于您列出的唯一import是Provider,因此我们无法判断这是否正确。