加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Guice Generic Provider(Provider本身是通用的,而不是它

发布时间:2020-12-15 04:14:23 所属栏目:Java 来源:网络整理
导读:有很多关于如何使用Guice Provider绑定到泛型类的在线资源,例如 wiki entries like this和 SOF questions like this.但是,我无法找到有关如何使用通用的Provider的资源. 例如,假设我有以下内容: public interface Foo { ...}public class Bar implements Fo
有很多关于如何使用Guice Provider绑定到泛型类的在线资源,例如 wiki entries like this和 SOF questions like this.但是,我无法找到有关如何使用通用的Provider的资源.

例如,假设我有以下内容:

public interface Foo {
    ...
}

public class Bar implements Foo {
    ...
}

如您所见,Bar有一个注入参数,必须在构造函数中.在我的情况下,我们无法将此参数移动到字段或方法注入.

所以,现在我想为Foo编写一个Provider,但它返回一个Bar实例.像这样的东西:

@Singleton
public class FooProvider<T extends Foo> extends Provider<Foo> {
    @Inject
    public FooProvider(Object someParameterWeMustInjectIntoConstructor) {
        ...
    }
    ...
    @Override
    public Foo get() {
        return new Bar(...);
    }
    ...
}

注意这个类是如何依赖于Guice注入本身的单例,因此必须使用.toProvider(FooProvider.class)配置Provider.我们也只能使用构造函数注入而不是方法和字段注入,可能是因为具有此Provider的类型层次结构.

我试图找到一些使用.toProvider(FooProvider< Bar> .class),但我们都知道这不是有效的Java语法.有谁知道如何在模块中使用Guice活页夹的.toProvider(Class<?extends Provider>)方法,这样我就可以使用通用的Provider来创建一个具体的实现类?如果我的问题有点令人困惑,请告诉我.

解决方法

toProvider(new TypeLiteral<FooProvider<Bar>>() { });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读