首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TypeLiteral中正确使用GinMapBinder?

如何在TypeLiteral中正确使用GinMapBinder?
EN

Stack Overflow用户
提问于 2013-10-25 16:56:07
回答 1查看 636关注 0票数 2

我想要做的是创建地图,其中键将是扩展我的抽象类的类。

代码语言:javascript
复制
GinMapBinder<Class<? extends Key>, Value> mapBinder = GinMapBinder
                .newMapBinder(binder(),
                        new TypeLiteral<Class<? extends Key>>() {
                        }, new TypeLiteral<Value>() {
                        });

但当我试图填充我的地图

代码语言:javascript
复制
mapBinder.addBinding(KeyImpl.class).to(Value.class);

我搞错了:

代码语言:javascript
复制
 Error injecting @com.google.gwt.inject.client.multibindings.Internal() java.lang.Class<? extends my.test.gwt.gin.objects.Key>: Unable to create or inherit binding: No implementation bound   for '@com.google.gwt.inject.client.multibindings.Internal() java.lang.Class<? extendsmy.test.gwt.gin.objects.Key>' and an implicit binding cannot be created because the type is annotated.
  Path to required node:

 @com.google.gwt.inject.client.multibindings.Internal com.google.gwt.inject.client.multibindings.MapEntry<java.lang.Class<? extends my.test.gwt.gin.objects.Key>, my.test.gwt.gin.objects.Value> [com.google.gwt.inject.client.multibindings.BindingRecorder.bind(BindingRecorder.java:42)]
  -> com.google.gwt.inject.client.multibindings.MapEntry<java.lang.Class<? extends my.test.gwt.gin.objects.Key>, my.test.gwt.gin.objects.Value> [com.google.gwt.inject.client.multibindings.BindingRecorder.bind(BindingRecorder.java:42)]
  -> @com.google.gwt.inject.client.multibindings.Internal() java.lang.Class<? extends my.test.gwt.gin.objects.Key> [@Inject constructor of com.google.gwt.inject.client.multibindings.MapEntry<java.lang.Class<? extends my.test.gwt.gin.objects.Key>, my.test.gwt.gin.objects.Value>]

如果我不使用TypeLiteral,这将有效,但我不希望类的原始类型。如果有人能帮我解决这个问题,我会很高兴的。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-19 11:31:59

问题解决

我为每个密钥创建了提供程序

代码语言:javascript
复制
public class KeyImplProvider implements
        Provider<Class<KeyImpl>> {

    @Override
    public Class<KeyImpl> get() {
        return KeyImpl.class;
    }
}

我正在添加要映射的元素

代码语言:javascript
复制
mapBinder.addBinding(KeyImplProvider.class).to(Value.class);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19595497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档