下面的Java代码设置Guice绑定。它使用AbstractModule的匿名子类来设置绑定,并使用configure的实现来设置绑定,并使用TypeLiteral的匿名子类为特定类型参数(as described here)创建Map到HashMap的绑定。
injector = Guice.createInjector(new AbstractModule() {
@Override protected void configure() {
bind(new TypeLiteral<Map<String, Event>>() {})
.to(new TypeLiteral<HashMap<String, Event>>() {});
}
});,我怎么能用写这篇文章?
据我所见,X趋向不支持实现匿名类或嵌套类(文档中没有提到它们,我也无法猜出一个有效的语法)。因此,我必须在单独的AbstractModule文件中定义我的TypeLiteral和每个TypeLiteral实现。不太简洁。我是不是错过了一个使这件事运转良好的X趋向或Guice技巧?
发布于 2011-11-21 20:09:28
您可以使用闭包来实现模块接口:
注射器= Guice.createInjector Guice.createInjector
但是,这并不能解决类型文字的问题。您必须使用Java来实现这一功能,但我认为这不会有什么影响。
发布于 2011-11-20 11:05:50
如何引入一个真正的类而不是一个匿名的内部类呢?
发布于 2012-05-04 13:07:07
在相关的说明中,您可以使用X趋向闭包来实现Guice的提供者接口。
例如,在Java中调用IResourceScopeCache.get:
@Inject
private IResourceScopeCache cache;
public EvaluatedResource getEvaluatedResource(EObject object) {
final Resource resource = object.eResource();
return cache.get("key", resource, new Provider<Object>() {
public Object get() {
return evaluate(resource);
}
});
}
public EvaluatedResource evaluate(Resource resource) {
...; // create EvaluatedResource evaluatedResource
return evaluatedResource; // return it
}在X极体中成为:
@Inject
IResourceScopeCache cache
def getEvaluatedResource(EObject object) {
val resource = object.eResource
cache.get("key", resource, [|evaluate(resource)])
}
def evaluate(Resource resource) {
... // create EvaluatedResource evaluatedResource
evaluatedResource // return it
}诀窍是[|...]是一个零参数的函数,在本例中是Provider.get()。
https://stackoverflow.com/questions/8200023
复制相似问题