gpt4 book ai didi

java - 使用 byte-buddy 从头开始​​创建一个类及其方法

转载 作者:行者123 更新时间:2023-12-02 08:52:47 24 4
gpt4 key购买 nike

是否可以使用 bytebuddy 创建一个全新的类和方法?

我看到的所有示例都使用现有类或拦截现有方法来修改它们。

是否有通过bytebuddy构造一个类并动态添加一些方法并返回该类的实例的示例?

最佳答案

所有Java类都需要扩展另一个类,因此您至少需要扩展Object.class。使用接口(interface)或替换现有类中的方法,使它们无需大量使用反射即可使用,所以这就是很多人所做的。但这不是必需的。

子类Object.class添加您的方法/字段并委托(delegate)给您在java中编写的实际方法。 “Hello World”示例正是这样做的。

Class<?> dynamicType = new ByteBuddy()
.subclass(Object.class)
.method(ElementMatchers.named("toString"))
.intercept(FixedValue.value("Hello World!"))
.make()
.load(getClass().getClassLoader())
.getLoaded();

assertThat(dynamicType.newInstance().toString(), is("Hello World!"));

Byte Buddy 可以创建动态方法体,但在这种情况下,您基本上要编写 java 汇编程序。如果您需要这方面的帮助,您可能想问一个关于您想要创建的内容的更具体的问题。

如果您能够将您的需求融入到bytebuddy的注释/约定/拦截/委托(delegate)方法中,我强烈建议您尝试使用它。您的代码将是可调试的(您可以在委托(delegate)中设置断点),并且由知道如何编写正确的 java 汇编程序(javac 和 byte-buddy 作为粘合剂)的人生成。

关于java - 使用 byte-buddy 从头开始​​创建一个类及其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60676638/

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