问题描述
我正在使用MethodCall.setsField()
尝试在另一个实例上设置实例字段。
我生成的正在进行字段设置的类GC
试图在其创建的某个实例的实例(CI
)中设置实例字段的值。因此,该字段的声明类型为CI
;我的字段设置代码位于GC
(与CI
位于同一程序包中,但与此无关)。
ByteBuddy checks seem to indicate that although GC
and CI
are in the same package,GC
must be assignable to CI
in order to set this field!这让我大吃一惊,但我不是字节码专家,所以我很可能会忽略一些明显的问题。有人可以解释一下为什么需要进行此检查吗?
解决方法
方法调用隐式地在调用该方法的 this 实例上设置该字段。为此,必须使用调用该方法的类型的超类型声明一个非静态字段。
如果您认为这太严格了,请提出一个问题,并提供您要尝试生成的代码示例,包括当前正在失败的代码。也许我不是直接考虑这一点,如果有限制要取消,我一定会这样做。