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-plugin</artifactId>
            <configuration>
                <compilerArgument>-parameters</compilerArgument>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

這樣編譯,就能得到真正的方法參數名了,最後的打印結果是

name
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章