Java如何获取方法参数的参数名称?

1. Java8

public class TestGetMethodParamName {
    public String test(String name, Integer age) {
        return null;
    }

    public static String printMethods() {
        StringBuilder sb = new StringBuilder();
        for (Method m : TestGetMethodParamName.class.getDeclaredMethods()) {
            sb.append(m.getReturnType().getSimpleName());
            sb.append("  ").append(m.getName());
            sb.append("(");
            String paramString = Stream.of(m.getParameters())
                        .map(p -> p.getType().getSimpleName() + " " + p.getName())
                        .collect(Collectors.joining(", "));
            sb.append(paramString);
            sb.append(")\n");
        }
        return sb.toString();
    }

    public static void main(String args[]) {
        String s = printMethods();
        System.out.println(s);
    }
}

执行结果:
void main(String[] arg0)
String test(String arg0, Integer arg1)
String lambda$0(Parameter arg0)
String printMethods()

  • 设置下Eclipse

这里写图片描述
再次执行
void main(String[] args)
String test(String name, Integer age)
String lambda$0(Parameter p)
String printMethods()

用javac命令的时候增加 -parameters参数即可
-parameters 生成元数据以用于方法参数的反射

 java com/cctv/website/core/common/extension/reflect/TestGetMethodParamName
void  main(String[] arg0)
String  test(String arg0, Integer arg1)
String  printMethods()
String  lambda$printMethods$0(Parameter arg0)

localhost:java bao$ javac -parameters com/cctv/website/core/common/extension/reflect/TestGetMethodParamName2.java
localhost:java bao$ java com/cctv/website/core/common/extension/reflect/TestGetMethodParamName2
void  main(String[] args)
String  test(String nameInteger age)
String  printMethods()

注:IDEA的设置如下
preferences->
这里写图片描述

2. 使用Javassist或者ASM(Spring使用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值