런타임에 메서드의 매개 변수 이름을 가져와야합니다. 이것을 달성 할 수있는 방법이 있습니까?인터페이스 메서드의 매개 변수 이름 얻기
스프링 클래스 인 LocalVariableTableParameterNameDiscoverer
을 사용해 보았습니다. 그러나 인터페이스는 클래스가 아닌 인터페이스에서만 작동합니다.
런타임에 메서드의 매개 변수 이름을 가져와야합니다. 이것을 달성 할 수있는 방법이 있습니까?인터페이스 메서드의 매개 변수 이름 얻기
스프링 클래스 인 LocalVariableTableParameterNameDiscoverer
을 사용해 보았습니다. 그러나 인터페이스는 클래스가 아닌 인터페이스에서만 작동합니다.
매개 변수 이름을 얻는 유일한 방법은 -g:vars
옵션을 사용하여 소스 코드를 컴파일하는 것입니다. 그러면 클래스 파일에 LocalVariableTable
속성이 생성됩니다. 이것은 일반적으로 최적화를 위해 제거됩니다. LocalVariableTable
가 ASM 원하는 바이트 코드 계측 라이브러리를 사용하여 판독 될 수
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.
자바 인터페이스에서도이 기능이 작동합니까? –
나 자신을 시도하지는 않았지만 컴파일 할 때 인터페이스는 결국 .class 파일로 변환되므로 Java 클래스 파일의 .class와 일치해야합니다. – Santosh
이것이 가능한 유일한 방법은'.java' 파일을 파싱하는 것입니다. – Obicere
다음은 비슷한 것입니다. 필요한 모든 것일 수 있습니다. http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection – Jlewis071
아는 한 그것이 될 것입니다. 자바 8 리플렉션에서 가능합니다. 그렇지 않으면 라이브러리를 조작하는 bytcode를 사용해야합니다. –