使用Paranamer jar获取参数名称

时间:2013-07-01 16:24:38

标签: java

我正在尝试使用paranamer jar来检索我的类的参数名称 - 我在我的一个小项目中使用它。

但是,测试paranamer - http://paranamer.codehaus.org/ - 它不会返回一个方法的参数名称!这是域类 - 带参数的方法,我试图返回名称:

package domain;

public class DomainTest {

private String attribute1;
private int attribute2;

public DomainTest() {

}

public DomainTest(String attribute1, int attribute2) {
    super();
    this.attribute1 = attribute1;
    this.attribute2 = attribute2;
}

public void someMethod(String paramTest) {
    System.out.println("METHOD IN DOMAIN CLASS");
}

public String getAttribute1() {
    return attribute1;
}

public int getAttribute2() {
    return attribute2;
}   

}

方法“someMethod”。

这里的类试图返回参数名称:

package Testes;

import java.lang.reflect.Method;

import com.thoughtworks.paranamer.CachingParanamer;
import com.thoughtworks.paranamer.Paranamer;

import domain.DomainTest;

public class Test {

public static void main(String[] args) {
    Class<?> myClass = DomainTest.class;

    System.out.println("CLASS NAME " + myClass.getCanonicalName());

    String[] ParameterNames = null;

    Paranamer paranamer = new CachingParanamer();

    for (Method method : myClass.getDeclaredMethods()) {

        System.out.println("METHOD NAME: " + method.getName());

        ParameterNames = paranamer.lookupParameterNames(method, false);

        if (ParameterNames.length > 0) {
            System.out.println("OK!");
        } else {
            System.out.println("NO!");
        }
    }

    System.out.println("TESTING!");

    for (int i = 0; i < ParameterNames.length; i++) {
        System.out.println("PARAMETER NAME " + ParameterNames[i]);
    }
}

}

在其他用户的其他主题中,人们说paranamer类只能获得调试信息设置为on的参数名称 - 在javac中使用-g或在eclipse IDE中的java编译器中设置它。

我已经做了这个,但仍然没有工作,没有返回上面方法someMethod的参数名称。我正在使用此处列出的所有依赖项:http://grepcode.com/snapshot/repo1.maven.org/maven2/com.thoughtworks.paranamer/paranamer/2.5.2/

有人可以帮助我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我在巴西论坛(http://www.guj.com.br

的帮助后解决了

我必须使用AdaptiveParameter而不是CachingParameter,这样:

Paranamer paranamer = new AdaptiveParanamer();