在 Java 中,“Parameter 参数”通常出现在 反射(Reflection) 场景里,最常见的是 java.lang.reflect.Parameter(方法或构造函数的参数)。下面系统地讲一下如何遍历 Parameter。
Method method = SomeClass.class.getDeclaredMethod("methodName", String.class, int.class);
Parameter[] parameters = method.getParameters();
for (Parameter parameter : parameters) {
System.out.println("参数名: " + parameter.getName());
System.out.println("参数类型: " + parameter.getType());
System.out.println("泛型类型: " + parameter.getParameterizedType());
}
⚠️ 注意
arg0, arg1,除非编译时加了 -parameters 参数javac -parameters xxx.java
Constructor<?> constructor = SomeClass.class.getDeclaredConstructor(String.class);
Parameter[] parameters = constructor.getParameters();
for (Parameter parameter : parameters) {
System.out.println(parameter);
}
for (Parameter parameter : method.getParameters()) {
if (parameter.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation annotation = parameter.getAnnotation(MyAnnotation.class);
System.out.println(annotation.value());
}
}
parameter.isVarArgs(); // 是否为可变参数
parameter.isNamePresent(); // 参数名是否可用
parameter.getModifiers(); // 修饰符
Type type = parameter.getParameterizedType();
if (type instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) type;
Type[] actualTypes = pType.getActualTypeArguments();
}
MethodParameter methodParameter = new MethodParameter(method, index);
methodParameter.getParameterType();
methodParameter.getParameterName();
MyBatis 内部使用 ParamMap 或 @Param,不直接暴露 Parameter
public class Demo {
public void test(String name, @MyAnno int age) {}
public static void main(String[] args) throws Exception {
Method m = Demo.class.getMethod("test", String.class, int.class);
for (Parameter p : m.getParameters()) {
System.out.println(p.getName() + " : " + p.getType());
}
}
}
如果你指的是 lambda 参数 / 注解参数 / Spring 参数解析 / 字节码层面的 Parameter,可以告诉我具体场景,我可以给你更精准的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。