【问题标题】:ByteBuddy: How to declare a class with a custom method inside another classByteBuddy:如何在另一个类中使用自定义方法声明一个类
【发布时间】:2019-06-27 05:00:21
【问题描述】:

我正在尝试动态创建一个扩展类 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();```

【问题讨论】:

    标签: java reflection byte-buddy


    【解决方案1】:

    在字节码级别,在 Foo 中定义的内部类 Bar 只不过是一个名为 Foo$Bar 的类,带有一些额外的元数据。

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

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多