如何编写通用的 Guice 绑定函数?
如何在下面的 Guice 绑定代码中抽象 Option 类型,并用泛型参数替换 Option
?
ArrayList<Class<? extends Option>> options =
new ArrayList<Class<? extends Option>>();
bindMultibinder(annotation, options);
public Key<Set<Option>> bindMultibinder(
Named annotation, ArrayList<Class<? extends Option>> contents) {
Multibinder<Option> options =
Multibinder.newSetBinder(binder(), Option.class, annotation);
for (Class<? extends Option> option : contents) {
options.addBinding().to(option);
}
final Key<Set<Option>> multibinderKey =
Key.get(new TypeLiteral<Set<Option>>(){}, annotation);
return multibinderKey;
}
How can I abstract the Option type in the below Guice binding code, substituting a generic parameter for Option
?
ArrayList<Class<? extends Option>> options =
new ArrayList<Class<? extends Option>>();
bindMultibinder(annotation, options);
public Key<Set<Option>> bindMultibinder(
Named annotation, ArrayList<Class<? extends Option>> contents) {
Multibinder<Option> options =
Multibinder.newSetBinder(binder(), Option.class, annotation);
for (Class<? extends Option> option : contents) {
options.addBinding().to(option);
}
final Key<Set<Option>> multibinderKey =
Key.get(new TypeLiteral<Set<Option>>(){}, annotation);
return multibinderKey;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
感谢 Google 网上论坛的 Stuart McCulloch 的回答:
为了使其正确构建,我对其进行了如下修改:
所以完整的通用方法是:
Thanks to Stuart McCulloch on Google Groups for answering:
To get this to build correctly, I modified it as follows:
So the complete generic method is:
对我来说 Guice
Key
不支持使用泛型 - 你只能有完全指定的东西(即没有未绑定的类型参数)。Says to me that Guice
Key
doesn't support using Generics - you can only have something fully specified (i.e. with no unbound type parameters).