带有类型参数的 Guice 模块
我花了一些时间想知道是否可以编写一个 guice 模块 它本身用类型 T 参数化并使用 它的类型参数来指定绑定。
就像在这个(不起作用)示例中一样:
interface A<T> {}
class AImpl<T> implements A<T>{}
interface B<T> {}
class BImpl<T> implements B<T> {}
class MyModule<T> extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<A<T>>(){}).to(new TypeLiteral<AImpl<T>>(){});
bind(new TypeLiteral<B<T>>(){}).to(new TypeLiteral<BImpl<T>>(){});
}
}
我尝试了不同的方法,试图将 T 作为实例传递给 MyModule Class/TypeLiteral 但它们都不起作用。 帮助表示赞赏。
问候, 乌卡斯·奥西皮克
I spent some time wondering if it is possible to write a guice module
which itself is parametrized with type T and uses
its type parameter to specify bindings.
Like in this (not working) example:
interface A<T> {}
class AImpl<T> implements A<T>{}
interface B<T> {}
class BImpl<T> implements B<T> {}
class MyModule<T> extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<A<T>>(){}).to(new TypeLiteral<AImpl<T>>(){});
bind(new TypeLiteral<B<T>>(){}).to(new TypeLiteral<BImpl<T>>(){});
}
}
I tried different approaches passing trying to pass T to MyModule as instance of
Class/TypeLiteral but none of them worked.
Help appreciated.
Regards, Łukasz Osipiuk
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为此,您必须使用 com.google.inject.util.Types 从头开始构建每个 TypeLiteral。您可以这样做:
请注意,私有方法 newGenericType() 不会对类型执行任何控制,您有责任在
configure()
中确保可以正确构建泛型类型用那个方法。For that you will have to build each TypeLiteral from scratch, using
com.google.inject.util.Types
. You could do something like that:Please note that the private method newGenericType() will perform no control on types, it is your responsibility, in
configure()
, to make sure that generic types can be correctly built with that method.