使用Java反射,如何获取方法的参数化参数类型?

时间:2012-04-12 14:13:45

标签: java reflection

假设我有一个方法:

public void method(LinkedList<Integer> intList);

我使用反射来获取此方法的java.lang.reflect.Method,我想获取ParameterizedType,即。链表&LT;整数&GT;

不幸的是,使用Method.getParameterTypes()我似乎只能得到非参数化的Class Class&lt; LinkedList&gt;。

但是在我的调试器中,如果我查看Method对象,我会看到有一个“签名”字段似乎确实包含通用信息:

(Ljava/util/LinkedList<Ljava/lang/Integer;>;)V

那么如何从Method对象中获取LinkedList参数化类型?

1 个答案:

答案 0 :(得分:6)

使用Method.getGenericParameterTypes。示例代码:

import java.lang.reflect.*;
import java.util.*;

public class Test {

    public void foo(LinkedList<Integer> intList) {
    }

    public static void main(String[] args) throws Exception {
        Method method = Test.class.getMethod("foo", LinkedList.class);
        Type[] parameters = method.getGenericParameterTypes();
        System.out.println(parameters[0]);
    }
}

输出:

java.util.LinkedList<java.lang.Integer>