作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如
public final class SomeModule<T> extends AbstractModule {
private final Class<T> clazz;
public SomeModule(Class<T> clazz) {
this.clazz = clazz;
}
@Provides
T getT(@ExternalAnnotation Any any) {
Any payload = asset.get().getPayload();
return payload.<T>unpack(clazz);
}
}
这将导致错误:
T cannot be used as a key; It is not fully specified.
这里使用 TypeLiteral 和 Key 似乎都不合适,因为我希望返回类型仍然是 T 类型。有什么想法吗?
最佳答案
通过类型删除,Guice 将无法从模块实例中获得足够的信息来确定要绑定(bind)的类型。
相反,接受类文字并使用它。此示例保留了泛型,但如果您的用例不需要它们,则可以删除它们。
// Warning: Untested. Please revise if needed.
public final class SomeModule<T> extends AbstractModule {
private Class<T> t;
public SomeModule(Class<T> t) {
this.t = t;
}
@Override
public void configure() {
// Uses a class instance rather than reflection, so this is fine.
bind(t).toProvider(new Provider<T>() {
// ... do stuff
});
}
}
另请参阅:
关于java - 如何在 Guice AbstractModule 中使用 @Provides 方法绑定(bind)泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38257034/
我是一名优秀的程序员,十分优秀!