如何将默认值分配给新定义的字段



这是我第一次使用ByteBuddy,我想动态创建一个java.lang.Object子类,只有一个名为myValue的公共字段,类型为java.lang.String,默认值为"Hello World!不幸的是,在调用 myClass.newInstance() 后,字段的值null(在 Eclipse 调试器中)。

final Class<?> myClass = new ByteBuddy().subclass(Object.class).name("test.MyClass")
    .defineField("myValue", String.class, Visibility.PUBLIC)
    .value("Hello World !")
    .make()
    .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.INJECTION).getLoaded();
Object myObject = myClass.newInstance();

我在这里错过了什么吗?

我正在使用Eclipse Mars.2,Oracle JDK 1.7.0_75和ByteBuddy-1.2.3

value 方法是为字段编写常量池默认值,这在 Java 中只能用于static字段。在这种情况下,字节好友应引发异常,而不是静默抑制错误。我将在下一个版本中更改此行为并更新 javadoc 以更清楚地了解 value 方法正在做什么。

如果要设置字段值

,则需要截获任何构造函数以设置字段值。您可以通过不同的方式执行此操作,例如将MethodDelegation@FieldProxy注释结合使用。该文档显示了如何执行此操作的示例。

最新更新