温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Parameter参数如何反射

发布时间:2026-09-13 15:48:03 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

在 Java 中,Parameter(方法参数) 是通过 反射(Reflection) 获取的,主要用于在运行时获取方法的参数信息,比如参数名、类型、注解、修饰符等。

下面从基本用法 → 常见场景 → 注意事项逐步说明。


一、如何获取 Parameter 对象

1️⃣ 通过 Method 获取参数

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class Test {
    public void hello(String name, int age) {}

    public static void main(String[] args) throws Exception {
        Method method = Test.class.getMethod("hello", String.class, int.class);
        Parameter[] parameters = method.getParameters();

        for (Parameter param : parameters) {
            System.out.println(param);
        }
    }
}

输出示例:

java.lang.String name
int arg1

二、Parameter 常用方法

方法 说明
getName() 参数名(需注意下面说明)
getType() 参数类型
getParameterizedType() 泛型参数类型
getModifiers() 修饰符
isVarArgs() 是否为可变参数
getAnnotations() 参数上的注解
getAnnotation(Class) 指定注解
isNamePresent() 参数名是否可用

三、获取参数名(重要)

⚠️ 默认情况下参数名是不可见的

Java 编译时默认会擦除参数名

✅ 方式一:编译时加 -parameters

javac -parameters Test.java

然后:

Parameter param = parameters[0];
System.out.println(param.getName()); // name

✅ 方式二:使用注解(推荐,稳定)

public void hello(@Param("name") String name) {}
Param paramAnno = param.getAnnotation(Param.class);
System.out.println(paramAnno.value());

四、获取参数类型与泛型

Parameter param = parameters[1];
System.out.println(param.getType()); // int
System.out.println(param.getParameterizedType()); // int

泛型示例:

public void test(List<String> list) {}
System.out.println(param.getParameterizedType());
// java.util.List<java.lang.String>

五、读取参数注解

public void login(@NotNull String username) {}
if (param.isAnnotationPresent(NotNull.class)) {
    NotNull anno = param.getAnnotation(NotNull.class);
    System.out.println("参数不能为空");
}

六、判断可变参数

public void foo(String... args) {}
Parameter param = method.getParameters()[0];
System.out.println(param.isVarArgs()); // true

七、Constructor 中的 Parameter

构造方法同样支持:

Constructor<?> constructor = Test.class.getConstructor(String.class);
Parameter[] params = constructor.getParameters();

八、典型使用场景

✅ 框架开发(Spring、MyBatis)
✅ 参数校验
✅ 自动生成接口文档
✅ AOP 参数解析
✅ 通用工具方法


九、总结

核心步骤:

  1. ClassMethod / Constructor
  2. getParameters()
  3. 使用 Parameter API

记住一句话:

Java 反射获取参数名必须加 -parameters,否则用注解替代。


如果你有具体场景(比如 Spring、MyBatis、自定义注解、参数注入),可以直接说,我可以给你针对性示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI