2011-07-08 17 views
0

如果不使用顯式字節碼操作工具和其他框架,可以在Java 7中獲取執行時的方法參數值嗎?在Java 7中動態訪問方法參數

我需要它爲我的javassist日誌框架。

public void foo(String arg1, String arg2){ 
    //injected code 
    Object[] args; 
    args = ???;//get arg1 and arg2 values in current method context 
    Logger.logMethodArgs(args); 
    //end of injected code 
    ... 
} 

回答

1

基本上,在那種水平沒有什麼變化,唯一的語言水平變化是項目硬幣。

當然,在上面的代碼中,您可以將String arg1, String arg2更改爲String ... args,但這不適用於具有不同類型的參數。解決此問題的另一個方法是讓您的IDE(例如Eclipse)使用AST(抽象語法樹)中的信息生成日誌記錄語句。任何解析IDE應該能夠得到這個權利。如果您使用的是文本編輯器,那麼程序員可能需要做更多的工作,並自己遍歷一些參數。

+0

感謝您的回答,我發現這是不可能的...所以我只是要使用特定的注入,它將初始化參數對象的引用,所以我可以在注入代碼的下一部分中使用此引用。此刻,我使用變量名稱(使用java類調試信息)生成引用初始化代碼,稍後我將使用代碼分析工具刪除需要使用調試標誌進行編譯。 – setec

+0

很高興能有所幫助,如果你對他們感到滿意,不要忘記接受答案(任何正確的答案,不只是我的答案)。 –

1

http://paranamer.codehaus.org給出了參數名稱。它的另一個框架,但。我使用Maven的'陰影'插件,將類放入我正在構建的東西中,以便最終用戶沒有傳遞依賴性。