Java 8中如何獲取參數名稱的方法示例
前言
在Java 8之前的版本,代碼編譯為class文件后,方法參數的類型是固定的,但參數名稱卻丟失了,這和動態(tài)語言嚴重依賴參數名稱形成了鮮明對比?,F在,Java 8開始在class文件中保留參數名,給反射帶來了極大的便利。
示例:
public class GetRuntimeParameterName { public void createUser(String name, int age, int version) { // } public static void main(String[] args) throws Exception { for (Method m : GetRuntimeParameterName.class.getMethods()) { System.out.println("----------------------------------------"); System.out.println(" method: " + m.getName()); System.out.println(" return: " + m.getReturnType().getName()); for (Parameter p : m.getParameters()) { System.out.println("parameter: " + p.getType().getName() + ", " + p.getName()); } } } }
Method.getParameters
為1.8新增方法,可以獲取參數信息,包括參數名稱。
上述代碼輸出的createUser
參數如下:
method: createUser return: void parameter: java.lang.String, name parameter: int, age parameter: int, version
參數名稱被編譯進了class文件,替代了早期版本里無意義的arg0
、arg1
……
對于很多依賴參數名的框架,可進一步簡化代碼:
@Path("/groups/:groupid/:userid") public User getUser(String groupid, String userid) { ... }
沒有參數名的時代,得加上注解:
@Path("/groups/:groupid/:userid") public User getUser(@Param("groupid") String groupid, @Param("userid") String userid) { ... }
遺憾的是,保留參數名這一選項由編譯開關javac -parameters
打開,默認是關閉的。
在Eclipse中,可以通過Compiler選項打開:
注意:此功能必須把代碼編譯成1.8版本的class才行。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
Java httpcomponents發(fā)送get post請求代碼實例
這篇文章主要介紹了Java httpcomponents發(fā)送get post請求代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09SpringBoot使用Maven實現多環(huán)境配置管理
軟件開發(fā)中經常有開發(fā)環(huán)境、測試環(huán)境、生產環(huán)境,而且一般這些環(huán)境配置會各不相同,本文主要介紹了SpringBoot使用Maven實現多環(huán)境配置管理,感興趣的可以了解一下2024-01-01IDEA全量替換一次性解決舊項目并將所有文件換行符改為LF問題
這篇文章主要介紹了IDEA全量替換一次性解決舊項目并將所有文件換行符改為LF問題,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下2019-05-05springcloud中RabbitMQ死信隊列與延遲交換機實現方法
死信隊列是消息隊列中非常重要的概念,同時我們需要業(yè)務場景中都需要延遲發(fā)送的概念,比如12306中的30分鐘后未支付訂單取消,那么本期,我們就來講解死信隊列,以及如何通過延遲交換機來實現延遲發(fā)送的需求,感興趣的朋友一起看看吧2022-05-05Spring Boot整合mybatis并自動生成mapper和實體實例解析
本文是小編給大家總結的關于Spring Boot整合mybatis并自動生成mapper和實體的內容,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05