2016-06-02 6 views
0

javascist.expr.MethodCall.getClassName()은 바이트 코드 분석에 의존하기 때문에 메소드 호출자의 컴파일 시간 유형을 반환한다는 것을 알고 있습니다. 일부 트릭이나 코드 검사를 통해 javassist를 사용하여 메서드 호출자의 실제 런타임 유형을 얻는 효율적인 방법이 있는지 궁금합니다.Javassist 라이브러리를 사용하여 메소드 호출자의 런타임 유형 감지

다음은 간단한 예입니다. javassist.expr.MethodCall에서이 예에서

public interface Animal { 

    public void eat(); 
} 


public class Dog implements Animal { 

    @Override 
    public void eat() { 
     System.out.println("dog eating"); 
    } 

} 


public class MainClass { 

    public static void main(String[] args) {  
     Animal a = new Dog(); 
     a.eat(); 
    } 
} 

, 나는 방법에 대한 메소드 호출로 "개"개체를 얻을 수있는 방법을 찾고 싶다 "a.eat()"

답변

0

당신이이 클래스에 대해 필요한 모든 것을 포함,이 메소드를 호출 한 클래스의와 Javassist 표현을 일단

CtClass ctc = javassist.expr.MethodCall.getMethod().getDeclaringClass(); 

: 당신은 쉽게이 방법을 호출 한 런타임 클래스를 얻을 수 있습니다. 당신이 정말 개 인스턴스를 필요로하는 경우

PS 당신은 반사 CtClass하여 이름을 복용, 예컨대 :

Class clazz = Class.forName(ctc.getName()); 
Dog dog = ((Dog)clazz).newInstance(); 
을 사용할 수 있습니다