2013-07-01 56 views
1

我想使用paranamer jar來檢索我的類的參數名稱 - 我在一個我的小項目中使用它。使用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類纔可以設置爲在調試信息獲得paramater名字 - 在javac中使用-g或在eclipse IDE中將其設置爲java編譯器。

我做了這個,仍然沒有工作,沒有返回上面的方法someMethod的參數名稱。我正在使用這裏列出的所有依賴關係:http://grepcode.com/snapshot/repo1.maven.org/maven2/com.thoughtworks.paranamer/paranamer/2.5.2/

有人可以幫我嗎?非常感謝!

+0

剛擡起頭:通過反射訪問參數名稱將成爲[Java 8]中的一項功能(http://openjdk.java.net/projects/jdk8/features#118)。 – Jeffrey

+0

@傑弗裏,他們也在7點說過。 paranamer jar真的有用,但我錯過了一些工作。非常感謝! –

+0

或者你可以只註釋你的方法和參數。不幹,但確實很好。 –

回答

0

我已經幫助解決了之後在巴西論壇(http://www.guj.com.br

我必須使用AdaptiveParameter代替CachingParameter,這種方式:

Paranamer paranamer = new AdaptiveParanamer();