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