JAVA通过反射获取方法真实参数名
生活随笔
收集整理的這篇文章主要介紹了
JAVA通过反射获取方法真实参数名
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
默認情況下,我們是無法獲取到方法中參數的名稱,通過反射機制也只能獲取到類似于arg0,arg1這樣表示參數順序的"參數名"
這樣當我們需要使用方法的實際參數時,比方說spring自動根據請求的參數給方法參數賦值時,或者創建接口的文檔時,就會比較麻煩。因為java文件在編譯時,不會將參數名稱信息記入class文件中,自然也不能通過反射獲取到。
在JDK 8之后,我們可以通過在編譯時指定“-parameters”選項,來實現將方法的參數名寫入class文件,并在運行時通過反射機制獲取對應的參數名。
如果項目是簡單的java項目:
在IDEA中,修改如下配置即可
File->Settings->Build,Execution,Deployment->Compiler->Java Compiler
如果項目使用的maven:
那么只需要在pom.xml里指定編譯時的參數選項即可
<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());}}} }運行結果:
spring代碼:
其底層也是通過反射獲取的參數名稱,只是對外封裝了一下
總結
以上是生活随笔為你收集整理的JAVA通过反射获取方法真实参数名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手写实现Spring(IOC、DI),S
- 下一篇: tomcat源码运行