2013-02-08 61 views
1

如何獲取在java類中的方法中聲明的變量名稱?如何獲得在java中的方法中聲明的變量名稱

爲如:

public class A { 
    String x; 
    public void xyz(){ 
    int i; 
    String z = null; 
    //some code here 
    } 
    Method[] methods = A.class.getDeclaredMethods(); 
    for (Method q = methods){ 

     //some code here to get the variables declared inside method (i.e q) 

    } 
} 

我怎樣才能做到這一點?

在此先感謝..

+1

所以你想要'我'和'Z'?我不認爲這是可能的,但是你打算怎麼處理它們呢? – assylias

+0

這些都是局部變量,你不能訪問他們的範圍。 –

+0

也許如果你解釋爲什麼你需要它們,那麼可能會有比反射更好的解決方案嗎? –

回答

0

套用另一種答案,有沒有(簡單)的方式與反射做到這一點。

有一種方法可以做到這一點。您需要完整的Java源代碼解析器和名稱/類型解析器(「符號表」)。

Java編譯器提供內部API來獲取該信息。 Eclipse JDT提供了類似的東西。我們的DMS Software Reengineering Toolkit提供了一個完整的解析器,可以輕鬆訪問這些信息,並且可以幫助構建利用這些額外信息的分析器和/或代碼生成器。 (您可以在我的站點的示例Java源代碼瀏覽器中看到由DMS提取的此信息,請參閱bio)。

+0

謝謝Ira Baxter .. – user1919581

2

有沒有簡單的方法來做到這一點。

如果這些是字段,您可以使用反射來獲取它們的名稱。但是,本地變量和參數名稱不會加載到JVM中。所以你需要讀取「A.class」文件並提取該方法的調試信息。壞消息是,如果這個類沒有編譯調試信息,那麼即使這樣也不行。

有各種庫用於閱讀「.class」文件用於各種目的,但我不能給出具體的建議。


但是64000美元的問題是「爲什麼......?」。列出Java中某個方法的局部變量名稱有什麼意義?你不能只看源代碼嗎?難道你不能用「javap」轉儲「.class」文件或者用一些第三方反編譯器反編譯它?


我想對大項目將是理解和分析有用的,如果我們可以來了解變量的類型和方法的名字和他們的參數列表等所以只有...

我想你只需要一個像樣的IDE ...