2013-08-12 11 views
5

Potrzebuję uzyskać nazwy parametrów metody w czasie wykonywania. Czy jest jakiś sposób, aby to osiągnąć?Uzyskaj nazwy parametrów metody interfejsu

Próbowałem użyć LocalVariableTableParameterNameDiscoverer, która jest klasą wiosenną. Ale działa tylko dla klas, a nie interfejsów.

+2

Jedynym sposobem, w jaki jest to naprawdę możliwe, jest parsowanie pliku '.java'. – Obicere

+0

Oto coś podobnego, może być wszystko, czego potrzebujesz: http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection – Jlewis071

+0

O ile mi wiadomo, będzie to możliwe w odbiorze Java 8, w przeciwnym razie użyjesz kodu bajtowego manipulując bibliotekami. –

Odpowiedz

2

Jedynym sposobem uzyskania nazw parametrów jest skompilowanie kodu źródłowego przy użyciu opcji -g:vars. Generuje to atrybut LocalVariableTable w pliku klasy. Zwykle jest to usuwane w celu optymalizacji.

Na przykład: (taken from here)

public class Example { 
    public int plus(int a){ 
    int b = 1; 
    return a + b; 
    } 
} 

To stworzy LocalVariableTable następująco

LocalVariableTable:

Start Length Slot Name  Signature 
    0  6  0  this  LExample; 
    0  6  1  a  I 
    2  4  2  b  I 

LocalVariableTable można odczytać za pomocą żadnych bibliotek oprzyrządowania kodu bajtowego jak ASM lub Javassist.

+0

Czy to też działa dla interfejsów Java? –

+0

Nie próbowałem siebie, ale po kompilacji, interfejs przekłada się ostatecznie na plik .class, dlatego powinien być zgodny z .class pliku klasy Java. – Santosh

Powiązane problemy