2012-04-08 2 views
1

모두.Javassist를 사용하여 메소드의 수정자를 삭제할 수 있습니까?

클래스 파일이 있습니다.

public class ClsSync { 
    public synchronized void biat(){ 
    }  
} 

나는

public void biat(){ // delete the synchronized keyword 
} 

나는 그것이와 Javassist를 사용하여 구현할 수로 변경하려면? javassist를 사용하여 클래스 파일의 메서드에 어노테이션을 추가하려면 어떻게해야합니까? 모든 제안을 환영합니다! 감사

답변

0

이 트릭

ClassPool cp = ClassPool.getDefault(); 
    CtClass cc = cp.get("ClsSync"); 

    CtMethod cm = cc.getDeclaredMethod("biat"); 
    cm.setModifiers(Modifier.PUBLIC); 

을해야 그냥 필요한 마스크를 설정하는 CtMethod#setModifiers()를 사용합니다.

+1

다른 플래그를있는 그대로 그대로두고 싶다면 cm.setModifiers (cm.getModifiers() & ~ Modifier.ABSTRACT)를 사용하는 것이 좋습니다 ("abstract"한정자는 제거하고 다른 모든 것을 그대로 두는 것이 좋습니다) . –

관련 문제