ByteBuddy的字段设置检查是否太严格?

问题描述

我正在使用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 实例上设置该字段。为此,必须使用调用该方法的类型的超类型声明一个非静态字段。

如果您认为这太严格了,请提出一个问题,并提供您要尝试生成的代码示例,包括当前正在失败的代码。也许我不是直接考虑这一点,如果有限制要取消,我一定会这样做。