2016-07-27 4 views
0

Ich vermisse etwas offensichtlich hier, aber ich sehe nicht die deklarierten Methoden, wenn ich eine Klasse mit ByteBuddy Unterklasse.Subclassing einer Klasse mit ByteBuddy führt zu einer Klasse ohne deklarierte Methoden

Object.class.getDeclaredMethods() 

Ergebnis:

[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()] 

Jetzt ByteBuddy mit:

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

Ergebnis:

[] 
+2

Lesen Sie das [Javadoc für 'getDeclaredMethods()'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredMethods()): "schließt geerbte Methoden aus ". –

+0

Macht jetzt Sinn. Danke @AndyTurner –

Antwort

1

Wie in den Kommentaren erwähnt, getDeclaredMethods gibt nur die Methoden, die expli sind citly von einer Klasse deklariert. Da Sie keine Methoden überschreiben, gibt es null solcher Methoden.

Wenn Sie eine Überschreibung für alle Methoden hinzugefügt, würden Sie sie wieder sehen (die nicht final sind):

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

Alternativ kann die Reflection-API bietet getMethods() für die Suche nach alle öffentlichen virtuellen Methoden.

Verwandte Themen