Method.getParameterTypes() 返回Class<?>[]数组,元素为方法各参数的运行时Class类型,顺序与声明一致,基本类型返回int.class等原始类型,泛型被擦除为List.class等原始类型,无参时返回空数组。

Method.getParameterTypes() 是 Java 反射中获取方法参数类型最直接的方式,它返回一个 Class<?>[] 数组,每个元素对应方法声明中的一个参数的运行时 Class 类型。
基本用法:调用 getParameterTypes() 即可
只要拿到 Method 对象(例如通过 Class.getDeclaredMethod() 或 Class.getMethod()),就能直接调用该方法:
- 返回数组长度 = 方法参数个数
- 数组元素顺序与方法签名中参数顺序严格一致
- 对基本类型(如
int、boolean)返回对应的包装类 Class?不,返回的是基本类型自身的 Class,比如 int.class、boolean.class
注意泛型擦除:无法获取泛型实际类型
getParameterTypes() 返回的是**原始类型(raw type)**,不包含泛型信息。例如:
void foo(List<String> list, Map<Integer, ? extends Number> map)- 调用
method.getParameterTypes()得到的是:{List.class, Map.class},不是List<String>.class(这种写法本身不合法) - 若需泛型参数,得用
Method.getGenericParameterTypes(),返回Type[],再做类型判断和转换
常见使用示例
假设有一个类:
立即学习“Java免费学习笔记(深入)”;
public class UserService {
public void update(String name, int age, boolean active) {}
}
反射获取参数类型:
Method m = UserService.class.getDeclaredMethod("update", String.class, int.class, boolean.class);Class<?>[] paramTypes = m.getParameterTypes();- 结果为:
{String.class, int.class, boolean.class} - 可遍历打印:
Arrays.stream(paramTypes).map(Class::getSimpleName).toArray()→["String", "int", "boolean"]
空参数方法也安全返回空数组
无参方法(如 void save())调用 getParameterTypes() 返回长度为 0 的数组(new Class[0]),不会返回 null,可直接遍历或判空处理,无需额外 null 检查。


















