日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!!

發(fā)布時(shí)間:2024/7/23 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JAVA獲取類的方法的參數(shù)名 – 老話題,新方法!!

折騰了一天,終于搞定了.測(cè)試了nutz所有的類,均讀取正常!! 完美讀取任何class的變量名信息! 呵呵,當(dāng)前,前提是編譯時(shí)含debug信息.

無任何依賴,不需要asm,不要其他任何字節(jié)碼工具,純標(biāo)準(zhǔn)JDK API實(shí)現(xiàn). 核心代碼,僅一個(gè)方法,130行,哦也!!

終于完成這個(gè)一直想做到的功能 – 在Java中,獲取方法的形參(參數(shù))的名字.由于這個(gè)類只做需要做的事,所以,我非常確信它比asm的vistor更快,更可靠.

public void list(int page , int pageSize) { //這個(gè)類的作用,就是拿到page和pageSize這兩個(gè)名字,是的,是名字.

//...

}

實(shí)現(xiàn)關(guān)鍵點(diǎn)::

1. 跳過一切不需要的數(shù)據(jù)結(jié)構(gòu),如版本號(hào),接口信息,字段信息

2. 只解析常量池中UTF8_String,因?yàn)橹挥玫竭@個(gè),其他都是多余的常量

3. 實(shí)現(xiàn)方法到descriptor的轉(zhuǎn)換函數(shù),因?yàn)樽止?jié)碼中的方法簽名,是descriptor格式的

代碼中含義泛型,直接貼這里的話,頁(yè)面顯示比較麻煩,就上個(gè)截圖吧.

代碼已經(jīng)提交到nutz,并添加了一個(gè)gist,歡迎使用,如果有任何解析失敗的類,非常歡迎發(fā)送給我進(jìn)行檢測(cè).

總結(jié)一下值得注意的寫法:

1. DataInputStream.skip跟DataInputStream.skipBytes不是一回事,當(dāng)較大的數(shù)值傳入skip方法,這個(gè)方法實(shí)際跳過的字節(jié)數(shù),往往小于預(yù)期.雖然skipBytes也并不保證完整跳過,但至今沒發(fā)現(xiàn)非完整跳過的情況

DataInputStream.readUnsignedShort()的返回值是int,而readShort的返回值是short,以前一直以為short是無符號(hào)的呢!! 好吧,還有readUnsignedByte方法

常量池中的CONSTANT_Long和CONSTANT_Double是8byte數(shù)據(jù),其之后的一個(gè)常量池位置,是不可使用的,必須跳過. 貼一下JVM標(biāo)準(zhǔn)的中的描述:

All 8-byte constants take up two entries in the constant_pool table of the class ?le. If a

CONSTANT_Long_info or CONSTANT_Double_info structure is the item in the

constant_pool table at index n, then the next usable item in the pool is located at index

n +2. The constant_pool index n +1 must be valid but is considered unusable.

有個(gè)小注釋:** In retrospect, making 8-byte constants take two constant pool entries was a poor choice.** 好吧,愚蠢的選擇,但這是歷史遺留問題了…

提醒: 這個(gè)類無法獲取接口的形參,因?yàn)榻涌诘腸lass文件并不保存變量名

blog comments powered by Disqus

總結(jié)

以上是生活随笔為你收集整理的java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。