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