JAVA通过反射获取方法真实参数名
默認(rèn)情況下,我們是無法獲取到方法中參數(shù)的名稱,通過反射機(jī)制也只能獲取到類似于arg0,arg1這樣表示參數(shù)順序的"參數(shù)名"
這樣當(dāng)我們需要使用方法的實(shí)際參數(shù)時(shí),比方說spring自動(dòng)根據(jù)請(qǐng)求的參數(shù)給方法參數(shù)賦值時(shí),或者創(chuàng)建接口的文檔時(shí),就會(huì)比較麻煩。因?yàn)閖ava文件在編譯時(shí),不會(huì)將參數(shù)名稱信息記入class文件中,自然也不能通過反射獲取到。
在JDK 8之后,我們可以通過在編譯時(shí)指定“-parameters”選項(xiàng),來實(shí)現(xiàn)將方法的參數(shù)名寫入class文件,并在運(yùn)行時(shí)通過反射機(jī)制獲取對(duì)應(yīng)的參數(shù)名。
如果項(xiàng)目是簡單的java項(xiàng)目:
在IDEA中,修改如下配置即可
File->Settings->Build,Execution,Deployment->Compiler->Java Compiler
如果項(xiàng)目使用的maven:
那么只需要在pom.xml里指定編譯時(shí)的參數(shù)選項(xiàng)即可
<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target><encoding>utf8</encoding><compilerArgs><arg>-parameters</arg></compilerArgs></configuration></plugin></plugins></build>?
java代碼:
public class Cal {private String operationName;public void setOperationName(String operationName){}public void add(int num1,int num2){} }public class Test {public static void main(String[] args) throws Exception{Class clazz = Class.forName("com.chenpp.util.Cal");Method[] methods = clazz.getMethods();System.out.println("=====================");for (Method method : methods) {System.out.println(method.getName());Parameter[] parameters = method.getParameters();for (Parameter parameter : parameters) {System.out.println("\t\t" + parameter.getName());}}} }運(yùn)行結(jié)果:
spring代碼:
其底層也是通過反射獲取的參數(shù)名稱,只是對(duì)外封裝了一下
總結(jié)
以上是生活随笔為你收集整理的JAVA通过反射获取方法真实参数名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手写实现Spring(IOC、DI),S
- 下一篇: tomcat源码运行