如何在运行时获取java中的参数名称

时间:2015-06-30 04:03:57

标签: java java-8

我使用的是Java 8.在Java 8中,方法名称为get参数,但它提供的输出类似于arg0arg1。但是我想要确切的参数名称。任何人都能告诉我如何实现它吗?我已经看到了一些响应,比如我们可以使用paranamer。但我找不到解决方案。我正在尝试构建一个自动化框架,因此我有这个要求。

例如,如果我的功能是

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

因此,在另一个类文件中,我希望输出为sUserName。

4 个答案:

答案 0 :(得分:6)

从Java 8开始,您可以使用Reflection 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是声明参数的方法的描述符中参数的索引。

答案 1 :(得分:0)

Java不支持在运行时提供变量名称。 (变量" name"在编译时实际上不会保存。) 要尝试的一件事可能是:

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

值得一想。不确定这是否是你想要的。

答案 2 :(得分: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());
       }
     }
   }
 }

我只是建议一种可能性; 不要这样做因为文档可以真正快速过时。

答案 3 :(得分: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)