0

使用: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有一个技巧来做到这一点......

我希望我的解释清楚,谢谢。

4

2 回答 2

0

正如我在这里正确理解的那样,您已经解释了如何在运行时访问泛型类型。如果要获取所有类的参数类型是不可能的。

于 2012-04-29T10:00:30.273 回答
0

我找到了使用TypeLiteral.getParameterTypes(Member)的解决方案

于 2012-04-29T18:34:57.093 回答