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

san*_*ity 1 java reflection

假设我有一个方法:

public void method(LinkedList<Integer> intList);
Run Code Online (Sandbox Code Playgroud)

我使用反射来获取此方法的java.lang.reflect.Method,我想获取ParameterizedType,即.链表<Integer>的.

不幸的是,使用Method.getParameterTypes()我似乎只能得到非参数化的Class Class <LinkedList>.

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

(Ljava/util/LinkedList<Ljava/lang/Integer;>;)V
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

java.util.LinkedList<java.lang.Integer>
Run Code Online (Sandbox Code Playgroud)