2015-06-30 74 views
2

在Java中獲得參數名我使用Java 8.在Java 8還有一個方法名稱,得到參數,但它給像arg0arg1輸出。但是我想要確切的參數名稱。任何人都可以告訴我如何實現它?我已經看到一些反應,比如我們可以使用paranamer。但我找不到解決方案。我想構建一個自動化框架,所以我有這個需求。我怎麼能在運行時

例如,如果我的功能是

public void Login(String sUserName, String sPassword) 
{ 
} 

所以在不同的類文件,我想輸出作爲sUserName。

+0

與某些語言不同,參數本身沒有命名,它們只是變量的佔位符,可以在代碼中命名爲任何東西。 Java使用參數類型來區分不同的方法 – MadProgrammer

+2

你如何編譯程序?編譯器默認刪除參數名稱。 – immibis

+0

你能告訴我們你在做什麼 – JSR

回答

5

從Java 8開始,你可以使用反射API來獲取參數名:

Method someMethod = Main.class.getDeclaredMethod("someMethod"); 
Parameter[] parameters = someMethod.getParameters(); 
for(Parameter parameter : parameters) 
{ 
    System.out.println(parameter.getName()); 
} 

而且,看到的Parameter#getName()的JavaDoc:

返回參數的名稱。如果參數的名稱存在,則此方法返回由類文件提供的名稱。否則,此方法合成的形式ARGN,其中N是在其聲明瞭參數的方法的描述符中的參數的索引的一個名稱。

+0

感謝您的回覆,但我已經嘗試過了,它給了我像arg0,arg1 o/p。由於我在函數中有兩個參數,它顯示第一個參數爲arg0,第二個參數爲arg1,而不是我在函數中給出的名稱。 –

+2

@shubhampandey使用'javac'編譯源代碼時使用選項'-parameters',它在存儲生成的類文件中存儲構造函數和方法的形式參數名稱。 –

+0

我怎樣才能使用Eclipse?作爲m在eclipse中使用TestNg框架運行代碼。 Eclipse中是否有這樣的設置? –

0

Java不支持在運行時提供變量名稱。 (變量分配的「名稱」編譯時不實際保存。) 一件事嘗試可能是沿着線的東西:

class NamedInteger{ 
    public String name; 
    public Integer value; 
} 

就值得思考。不知道這是否是你想要的。

+2

你碰巧注意到[這個答案](http://stackoverflow.com/a/31129383/2055998)? –

0

要麼你嘗試

的Eclipse - >項目屬性 - > Java編譯器 - >添加變量 屬性生成的類文件。

或者與調試信息爲javac -g:vars

編譯類以上僅適用於類而不是接口。

如果您絕對必須這樣做,那麼您可以放縱自己了。首先,您必須在類文件中定義具有參數信息的正確的java文檔。

/** 
* Print permutations of given string "aString". 
* @param fixed 
* @param aString 
*/ 

一旦做到這一點,你可以用一點Doclet代碼來讀取文件和文件從獲取的參數名稱。

for (ClassDoc classDoc : root.classes()) { 
    for (MethodDoc methodDoc : classDoc.methods()) { 
    if (methodDoc.parameters() != null) { 
     for (Parameter p : methodDoc.parameters()) { 
     System.out.println(p.name()); 
     } 
    } 
    } 
} 

那麼我只是建議一種可能性; 不要這樣做,因爲文件可以得到真正快速過時。

0
Hi I got the answers given by Eng.Fouad. 
You'll have to use jre1.8 
getParameters function is available in java8 only. 

I just used the following piece of code: 


for (Method method : CommonFunctions.class.getDeclaredMethods()) { 
      String name = method.getName(); 
      System.out.println("method is :"+name); 
     Parameter[] param = method.getParameters(); 
     for (Parameter parameter : param) { 
      System.out.println("name of parameter is :" +parameter.getName()); 
     } 

Here CommonFunctions is the class of which methods parameters you want. 

You need to do the folowing settings in the Eclipse: 
Window->Preference->Compiler->check option "Add Variable attribute to generated class file"(Usable through debugger) 
Window Preference ->Compiler-> Store information about method parameters(Usabe through reflection)