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>>() { }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |