是否有可能以某种方式继承修改字节码的最终类?
是否有可能继承使用字节码操作的最终类?
是和不是。
您可以使用字节码操作将final
类更改为非final
的。 这甚至不会破坏二进制兼容性,所以不存在类加载器/验证器错误的风险。
但是,您必须将字节码修改应用于final
类本身。 您不能对子类进行字节码操作,以使其从final
父类继承。 或者更确切地说,如果你这样做,修改后的子类将在与final
父类一起加载时被验证者拒绝。
这描述了类文件格式。 在偏移量10+cpsize
有2个字节定义了这个类的访问标志。 其中一个标志称为ACC_FINAL(0x0010)。 我想你可以掩盖这一点,并让这个班不是最终的。
上一篇: Is it possible to inherit a final class modifying bytecode somehow?