代码之家  ›  专栏  ›  技术社区  ›  Finbarr

伪装仿制药-我怎么能让它不那么难看?

  •  8
  • Finbarr  · 技术社区  · 14 年前

    我有一个接口 Producer<T> 和混凝土 FooProducer 那工具 Producer<Foo> . 假扮成这个样子看起来很难看,就像罪恶:

    bind(new TypeLiteral<Producer<Foo>>() {}).to(FooProducer.class);
    

    我有很多这样的装订。我尝试了以下方法:

    static <T> TypeLiteral<Producer<T>> producer() {
        return new TypeLiteral<Producer<T>>(){};
    }
    

    通过这种方式拨打电话:

    bind(ContainingClass.<Foo>producer()).to(FooProducer.class);
    

    但它在以下方面给出了一个错误: Producer<T> is not specific enough... .

    我是不是走错了路?

    3 回复  |  直到 13 年前
        1
  •  8
  •   Darren Gilroy    14 年前

    bind(new TypeLiteral<Producer<Foo>>() {}).to(FooProducer.class);
    

    static <T> Key<Producer<T>> producerOf(Class<T> type) {
      return (Key<Producer<T>>)Key.get(Types.newParameterizedType(Producer.class,type));
    }
    

    bind(producerOf(Foo.class)).to(FooProducer.class);
    

        2
  •  7
  •   Jesse Wilson    14 年前

    new Key<Producer<Foo>>(){} new TypeLiteral<Producer<Foo>>(){}

    @Provides
    public Producer<Foo> provideFooProducer(FooProducer fooProducer) {
      return fooProducer;
    }
    
        3
  •  3
  •   ColinD    14 年前

    TypeLiteral new TypeLiteral<Producer<Foo>>(){} new TypeLiteral<Producer<T>>(){} T

    Producer Provider

    bind(Foo.class).toProvider(FooProvider.class);
    

    Foo Provider<Foo>