【问题标题】:How to get the value from each field of a class with Byte Buddy?如何使用 Byte Buddy 从类的每个字段中获取值?
【发布时间】:2019-02-19 16:52:24
【问题描述】:

我正在编写一个库,该库使用带有 Byte Buddy 的 Java 代理来执行运行时代码生成。我需要创建一个表达式来从类的每个字段中获取值。

如何创建表达式来访问字段值?目前我正在探索FieldDescriptionAPI,但我没有找到任何可以做的事情。

【问题讨论】:

  • 您使用的是哪种仪器?你试过什么?
  • 我还有一个问题。如何将TypeDescription 生成为MethodDelegation.to(AddFooMethod.class)
  • @RafaelWinterhalter 我只需要在使用特定注释注释的类中创建一个方法 例如:@MyAnnotation public class Person { private String name; private String email; // method to be generated public void generatedMethod() { System.out.println("name " + this.name + " email " + this.email); } } 基本上我想在类中生成一个访问所有字段以获取其值的方法。

标签: byte-buddy javaagents


【解决方案1】:

根据您在 GitHub 上提供的其他信息,您将采取以下方式:

要创建StringBuilder,请调用MethodCall.construct(StringBuilder.class.getConstructor())

然后您可以将追加调用到字符串构建器,例如:MethodCall.invoke(StringBuilder.class.getMethod("append", Object.class)).onMethodCall(...).withField(...),您从初始字符串构建器开始,然后为每个字段或常量重复,将最后一个输入提供给下一个实例。

如果类型是原始类型,则必须根据字段类型调整方法才能使其正常工作。最后,您必须对toString 进行最终方法调用。

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多