2016-07-27 2 views
0

여기에 명백한 내용이 없지만 ByteBuddy를 사용하여 클래스를 서브 클래 싱 할 때 선언 된 메서드가 표시되지 않습니다.ByteBuddy를 사용하여 클래스를 서브 클래 싱하면 선언 된 메서드가없는 클래스가됩니다.

Object.class.getDeclaredMethods() 

는 결과 : 이제

[protected void java.lang.Object.finalize() throws java.lang.Throwable, public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException, public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException, public final void java.lang.Object.wait() throws java.lang.InterruptedException, public boolean java.lang.Object.equals(java.lang.Object), public java.lang.String java.lang.Object.toString(), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass(), protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException, private static native void java.lang.Object.registerNatives(), public final native void java.lang.Object.notify(), public final native void java.lang.Object.notifyAll()] 

이 ByteBuddy 사용은 :

new ByteBuddy().subclass(Object.class) 
.make() 
.load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION) 
.getLoaded().getDeclaredMethods() 

결과 :

코멘트에서 언급 한 바와 같이
[] 
+2

[getDeclaredMethods()]에 대한 Javadoc (https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredMethods())을 읽으십시오. "상속 된 메소드 제외 ". –

+0

이제 의미가 있습니다. 감사합니다 @ AndyTurner –

답변

1

, getDeclaredMethods은 expli있는 방법을 반환 citly는 클래스에 의해 선언했다. 어떤 메소드도 오버라이드하지 않으므로 그러한 메소드가 없습니다. 모든 방법에 대한 재정의를 추가 한 경우

다시 (비 최종 것들)을 볼 것입니다 :

new ByteBuddy().subclass(Object.class) 
    .method(any()).intercept(SuperMethodCall.INSTANCE) 
    .make() 
    .load(getClass().getClassLoader()) 
    .getLoaded() 
    .getDeclaredMethods() 

또는 반사 API는 모든 공공 가상 방법을 찾는 getMethods()을 제공합니다.

관련 문제