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:
[]
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 ". –
Macht jetzt Sinn. Danke @AndyTurner –