这是我第一次使用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
注释结合使用。该文档显示了如何执行此操作的示例。