2013-08-12 2 views
5

런타임에 메서드의 매개 변수 이름을 가져와야합니다. 이것을 달성 할 수있는 방법이 있습니까?인터페이스 메서드의 매개 변수 이름 얻기

스프링 클래스 인 LocalVariableTableParameterNameDiscoverer을 사용해 보았습니다. 그러나 인터페이스는 클래스가 아닌 인터페이스에서만 작동합니다.

+2

이것이 가능한 유일한 방법은'.java' 파일을 파싱하는 것입니다. – Obicere

+0

다음은 비슷한 것입니다. 필요한 모든 것일 수 있습니다. http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection – Jlewis071

+0

아는 한 그것이 될 것입니다. 자바 8 리플렉션에서 가능합니다. 그렇지 않으면 라이브러리를 조작하는 bytcode를 사용해야합니다. –

답변

2

매개 변수 이름을 얻는 유일한 방법은 -g:vars 옵션을 사용하여 소스 코드를 컴파일하는 것입니다. 그러면 클래스 파일에 LocalVariableTable 속성이 생성됩니다. 이것은 일반적으로 최적화를 위해 제거됩니다. LocalVariableTableASM 원하는 바이트 코드 계측 라이브러리를 사용하여 판독 될 수

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

:

예를 들어 : (taken from here)

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

이것은 LocalVariableTable 다음

LocalVariableTable를 만들 것 또는 Javassist.

+0

자바 인터페이스에서도이 기능이 작동합니까? –

+0

나 자신을 시도하지는 않았지만 컴파일 할 때 인터페이스는 결국 .class 파일로 변환되므로 Java 클래스 파일의 .class와 일치해야합니다. – Santosh