JAVA8反射获取方法参数名

jDK1.8的修改,在JDK8中,反射可以得到方法参数名了。是因为Method类加了新的方法

public Parameter[] getParameters()

但是实际项目中得到的确是arg0这样的参数名。请看下面代码:

public static void main(String[] args) throws NoSuchMethodException {
    final Method method = Cat.class.getMethod("say", String.class);
    final Parameter[] parameters = method.getParameters();
    for (Parameter parameter : parameters) {
        System.out.println(parameter.getName());
    }
}

这里的cat类是这个样子的

public class Cat {

    public String say(String name) {
        return "Meow, " + name;
    }
}

运行结果是

arg0

这是因为编译不带方法参数信息导致的
如果要编译带调试信息,需要用到javac -parameters
Javac -parameters是JDK8 新带的编译参数
如果是用gradle,那么需要配置gradle的编译参数
Gradle脚本这样配置

compileJava {
    options.compilerArgs << "-parameters"
}

如果是maven,则这样配置

<build>

    <plugins>
        <plugin>
            <artifactId>maven-compiler-pluginartifactId>
            <configuration>
                <compilerArgument>-parameterscompilerArgument>
                <source>1.8source>
                <target>1.8target>
            configuration>
        plugin>
    plugins>
build>

这样编译,就能得到真正的方法参数名了,最后的打印结果是

name

你可能感兴趣的:(JavaSE,JAVA8,反射)