gpt4 book ai didi

java - 使用 ByteBuddy 对类进行子类化会产生没有任何声明方法的类

转载 作者:行者123 更新时间:2023-12-01 09:38:37 25 4
gpt4 key购买 nike

我在这里遗漏了一些明显的东西,但是当我使用 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()

结果:

[]

最佳答案

正如评论中提到的,getDeclaredMethods 仅返回由类显式声明的方法。由于您没有重写任何方法,因此此类方法为零。

如果您为所有方法添加了覆盖,您将再次看到它们(非 final方法):

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

或者,反射 API 提供 getMethods() 来查找所有公共(public)虚拟方法。

关于java - 使用 ByteBuddy 对类进行子类化会产生没有任何声明方法的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38622903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com