使用:Guice 3
我想知道如何TypeLiteral
从泛型方法 parameterType 创建一个(用注入器注入它)。
这是一个例子:
语境 :
bind(new TypeLiteral<Set<String>>(){}).toInstance(x);
bind(new TypeLiteral<Set<Integer>>(){}).annotatedWith(INJECTOR.class).toInstance(y);
public class Foo
{
public void bar(Injector injector, Set<String> param, @INJECTOR Set<Integer> value)
{
//...
}
}
public class Example
{
@Inject
Injector injector;
public void methodInjector()
{
Method[] fooMethods = Foo.class.getMethods();
for(Method m : fooMethods)
{
for(Class<?> c : m.getParameter.getParameterTypes())
{
Object o = injector.getInstance(c);
/*
this work for simple Type like "Injector" but
don't work for generic type (Set<String>, List<Set<String>>, ...).
*/
}
}
}
}
显然注入java.util.Set
在我的情况下不起作用......也许TypeLiteral有一个技巧来做到这一点......
我希望我的解释清楚,谢谢。