ByteBuddy:如何在另一个类中使用自定义方法声明一个类

时间:2019-06-25 11:06:09

标签: java reflection byte-buddy

我正在尝试动态创建一个扩展ServerPing类的类,该类中有一个名为Serializer的静态类,我想覆盖其方法“ a”并返回我自己的JsonElement。 问题是我不知道如何使用bytebuddy在另一个类中编辑静态类。

这是它的外观(但defineClassInside不存在):

        Class<?> serverPingSerializerClone = new ByteBuddy()
                .subclass(serverPingClass)
                .defineClassInside("Serializer",
                        new ByteBuddy().subclass(ServerPing.Serializer.class)
                                .method(ElementMatchers.named("a")
                                        .and(ElementMatchers.returns(JsonElement.class)
                                                .and(ElementMatchers.takesArguments(3))))
                                .intercept(FixedValue.value(exampleResponse))
                                .make())
                .make()
                .load(Core.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER).getLoaded();```

1 个答案:

答案 0 :(得分:0)

在字节码级别,在Foo中定义的内部类Bar就是一个名为Foo $ Bar的类,其中包含一些其他元数据。

您可以像对待任何其他类一样对待内部/嵌套类并将其子类化。如果您需要添加内部类元数据,Byte Buddy可以通过DSL步骤来编辑/添加此类信息,例如innerTypeOf。