亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在已編譯的Java類中保留參數/參數名稱

在已編譯的Java類中保留參數/參數名稱

侃侃爾雅 2019-11-30 11:23:10
當我編譯這樣的東西:public class MyClass{    void myMethod(String name, String options, String query, String comment)    {        ...    }}并將其編譯為類文件,則似乎丟失了參數名稱。也就是說,當其他一些Java代碼引用MyClass并想要調用或覆蓋時myMethod,我的IDE(當前為Eclipse)似乎從類文件中獲得了此方法簽名:void myMethod(String arg0, String arg1, String arg2, String arg3);我知道Eclipse(可能還有其他IDE)允許我提供指向源或javadoc (如Bishiboosh所指出的)的鏈接,MyClass并且可以利用這一點。但是我很好奇是否有某種方法javac可以將名稱包括在類文件中,以便該類的用戶即使只有類文件也能看到參數名稱。課程解決方案當我使用編譯類時java -g:vars,參數名稱包含在類文件中。-g:vars似乎等效于Eclipse->項目屬性-> Java編譯器->將變量屬性添加到生成的類文件中。該解決方案是由幾位作者提出的,但是尼克的回答終于使我相信了。在我的機器上,Eclipse有時使用了此信息,有時卻沒有使用,這可能是我的錯或Eclipse中的錯誤,但不是類文件或編譯問題。無論如何,現在我知道該信息肯定存在。但是沒有接口的解決方案盡管這對類適用(有點),但不適用于接口。對我來說,邏輯上的原因似乎是-g:vars僅提供了局部變量的名稱,這也是javac的文檔所指出的。在方法的主體中,它的參數與局部變量非常相似,因此它們由-g:vars覆蓋。接口方法沒有主體,因此它們不能具有局部變量。我最初的問題只是要求上課,因為我不知道可能有什么區別。類文件格式正如gid所指出的那樣,類文件格式不支持參數名稱的存儲。我在類文件規范中找到了一個描述數據結構的部分,該數據結構應該與方法的參數名稱相同,但是在編譯接口時絕對不使用此結構。編譯類時,我無法確定是否使用了上述數據結構,或者Eclipse是否通過方法體內的參數使用來推斷參數名稱。專家可以澄清這一點,但是我認為這并不重要。
查看完整描述

3 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

無論使用什么javac選項,類文件數據結構都不支持將參數名稱存儲到任何方法。


為了在IDE中查看原始名稱,您必須為它們提供javadoc或源代碼。


如果您特別需要在運行時使用它們,則可以在參數中添加注釋,但是由于沒有可使用的標準集,因此您必須創建自己的注釋。


對不起,沒有什么幫助


編輯:我完全糾正...類文件格式顯然有足夠的空間用于命名參數(JLS 4.7)


我看不到的是,你怎么能用它們來對付他們 java.lang.reflect.*


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 1000 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號