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

TypeLiteral.getParameterTypes(Member)を使用して解決策を見つけました

于 2012-04-29T18:34:57.093 に答える
0

ここで正しく理解しているように、実行時にジェネリック型にアクセスする方法を説明しました。すべてのクラスのパラメータ型を取得したい場合、それは不可能です。

于 2012-04-29T10:00:30.273 に答える