java - Guice 泛型类型注入
问题描述
假设我有一个通用类,如下所示:
public class Base<T extends Stoppable> {
protected final Injector injector;
protected T stoppable;
public Base(Module... module) {
injector = Guice.createInjector(module);
Key<T> key = Key.get(new TypeLiteral<T>() {}); <-- T cannot be used as a key; It is not fully specified.
stoppable = injector.getInstance(key);
}
}
类型的实例Stoppable
使用以下方式绑定Multibinder
:
Multibinder<Stoppable> taskBinder =
Multibinder.newSetBinder(binder, Stoppable.class);
taskBinder.addBinding().to(MyClass.class);
有可能实现这一目标吗?
解决方案
不,不可能以您尝试的方式实现这一目标。
但是您可以将Class
/ Type
object 传递给Base
的构造函数并使用它来创建所需的类型文字,例如(我使用Set
它作为键,因为您提到了 multibinder):
public class Base<T extends Stoppable> {
protected final Injector injector;
protected T stoppable;
public Base(Class<T> type, Module... module) {
injector = Guice.createInjector(module);
var key = Key.get(com.google.inject.util.Types.setOf(type));
stoppable = injector.getInstance(key);
}
}
推荐阅读
- c++ - 何时以及何时不定义默认构造函数?
- linux - 如何在linux中指定文件内有空格的路径
- powerbi - 显示基于过滤器 Power Bi 的最后 4 个值
- python - Django:Offer有很多产品
- html - valueChanges 和 snapshotChanges() 有什么区别
- php - 在 Codeigniter 3 中将 Amazon AWS 开发工具包的 Use 语句放在何处
- javascript - 如何在 package.json 中添加新脚本
- .htaccess - 限制对文件夹、子文件夹和文件的访问 - htaccess
- javascript - 动态改变 vue 组件中显示的变量样式
- python - 如何让 django 在开发中服务静态文件?